从curses中使用initscr()时,在错误的位置打印

时间:2018-01-11 16:57:25

标签: c linux shell ncurses

我有以下代码。

initscr();
while ((ch = getch()) != '#')
{
    system("ls");
}
endwin();

问题是结果通常不会打印出来。 这就是它给我结果的方式:

project  project.c  shell.c  test   test1.c  test2.c
        Project  shell      Signal Labs  test1  test2    text.txt

但是我希望结果如下:
我的意思是我希望它以这种方式格式化:

project  project.c  shell.c      test   test1.c  test2.c
Project  shell      Signal Labs  test1  test2    text.txt

我确定缺少某项功能或与initscr()相关的内容。

1 个答案:

答案 0 :(得分:0)

'系统' call写入标准输出,curses库写入相同的文件描述符,但是它们的输出可能没有以相同的方式缓冲,curses库另外设置输出终端模式以更改回车和换线工作方式。所以你真的不想以这种方式将两者合并......

您可以从命令中读取结果,然后使用curses打印 。这样的事情(参见手册页的Initialization部分):

initscr();
cbreak();
noecho();
while ((ch = getch()) != '#')
{
    FILE *pp = popen("ls", "r");
    if (pp != 0) {
        while ((ch = fgetc(pp)) != EOF) {
            addch(ch & 0xff);
        }
        pclose(pp);
    }
}
endwin();