[英]Controlling the cursor while displaying the output of a C program in Linux
我正在编写要在Linux终端上执行的C程序。 程序进入无限循环并反复打印五行。 如何使光标回到前几行?
例如,我想打印字母并每15秒更换一次。 因此,在T = 0时,输出为
sh>./a.out
AA
BB
CC
DD
EE
在T = 15时,输出为
sh>./a.out
FF
GG
HH
II
JJ
我试图在STDOUT上使用lseek使其覆盖之前的文本。 但是我想终端不支持lseek。 我是否必须修改驱动程序API? 还是有更简单的方法来做到这一点?
见诅咒 。
您需要一个curses
库,例如ncurses 。
没有简单的方法可以做您想要的。 将stdout
视为无法拉回的连续纸。 一旦您打印了一行,就是这样。 对该行没有更多更改。
您可以通过使用标准未定义的特定库(通常是curses)将“ stdout”转换为另一种打印机。
在Linux终端上运行,您应该能够使用'\\ r'字符,这是一个回车符(没有新行)。 它将覆盖以前的内容。
尝试类似的东西:
#include <stdio.h>
int main(void)
{
printf("AA BB CC");
fflush(stdout);
sleep(3);
printf("\rDD EE FF");
fflush(stdout);
sleep(3);
printf("\n");
return 0;
}
这样,您应该可以在循环中做任何您想做的事情...
使用ncurses编辑...:
#include <stdio.h>
#include <ncurses.h>
int main(void)
{
initscr();
noecho();
raw();
printw("AA\nBB\nCC\n");
refresh();
sleep(3);
mvwprintw(stdscr, 0, 0, "DD\nEE\nFF\n");
refresh();
sleep(3);
endwin();
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.