Reputation: 3954
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?
Upvotes: 11
Views: 6380
Reputation: 1
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!
Upvotes: 3
Reputation: 129001
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);
Upvotes: 9