因为我正在设置一个新的服务器供我使用,所以我一直在使用很多命令行程序,如curl
和wget
,我注意到他们做了一些事情有趣。当在终端中运行时,它们会打印当前的进度(例如,54%将在55%到位,而不是在下一行打印55% - 下载一个大文件,你会明白我的意思。)
我一直在想程序如何做到这一点。写给stdout
对我来说并不是什么新鲜事,但我很困惑这样的事情会起作用。我曾尝试写stdout
,然后再向后寻求写作;打印退格字符('\b'
),并打印新内容;等等,但似乎没有任何效果。
Objective-C或C中没有API来执行此操作吗? (例如,C有ungetc()
,但没有unputc()
)。 可以实现这个目标吗?
我想更多地了解一些有趣的事情......
谢谢!
答案 0 :(得分:5)
最常用的方法是使用\r
返回行的开头并重写整行,但\b
也应该有效。确保您正在呼叫fflush(stdout)
。并且不要让光标移动到不同的行,否则重绘会更加痛苦。
答案 1 :(得分:3)
ncurses项目也可能对您感兴趣。一旦你超越了简单的东西,你就会专注于应用程序逻辑的核心,而不是它的演示!
您遇到的几乎所有漂亮的终端UI应用程序都使用GNU ncurses。
答案 2 :(得分:2)
基本上你可以用这样的东西来做:
printf( "progress %3d%%\r", perc );
\ r \ n返回同一行的开头
答案 3 :(得分:0)