繁体   English   中英

在Linux中显示C程序的输出时控制光标

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM