[英]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.