如何更新命令行输出?

在Linux中,虽然stdout命令行,我想更新特定区域,如apt-get输出:

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

百分比kB /秒将更新每秒。

如果我们使用printf那么我们会得到多行输出。 我试过下面的printf

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

但它清除所有的输出。

我的问题是如何更新特定区域并保持其他人稳定?

Solutions Collecting From Web of "如何更新命令行输出?"

使用回车。 它会将光标移回到行的开头,从中可以覆盖之前的行。 例如:

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

将显示为:

 Xello, world! 

确保你经常刷新stdout如果你想它是可见的:

 fflush(stdout); 

另外(上面有用的\rfflush 建议 ),如果你想要一个全屏的控制台输出,可以考虑使用ncurses 。 如果你想要一个可编辑的输入行, GNU readline库也是有用的!