How to update command line output?

2020-08-22 07:27发布

In Linux, While stdout to command line, I want to update specific area, such as the apt-get output:

54% [Waiting for headers] [Waiting for headers]        211 kB/s 3s

the percentage, kB/s and second will update each second.

If we use printf then we will get multiple lines output them. I have tried following printf:

printf("\e[1;1H\e[2J");

But it cleans all the output.

My question is how to update specific area and keep others stable?

2条回答
干净又极端
2楼-- · 2020-08-22 07:51

In addition (of the useful \r & fflush advice above), if you want a full screen console output, consider using ncurses. If you want an editable input line, the GNU readline library is useful too!

查看更多
疯言疯语
3楼-- · 2020-08-22 07:58

Use the carriage return. It will move the cursor back to the start of the line, from which you can overwrite what was in the line before. For example:

printf("Hello, world!\rX");

Will be visible as:

Xello, world!

Make sure you flush stdout often if you want it to be visible:

fflush(stdout);
查看更多
登录 后发表回答