通过管道输入curses 程序

通过管道输入curses 程序

ncurses 库提供了一个交互式用户界面。但是,我想知道如果将某些内容输入到程序中会发生什么。所以我尝试这样:

# echo foo | my_curses_prog

标准输入上似乎总是有待处理的输入,但getch无法读取任何内容。那么幕后到底发生了什么?


更新的测试程序:

#include <ncurses.h>

int main()
{
    WINDOW *win = initscr();
    nodelay(win, 0);
    refresh();
    FILE *fp = fopen("my_curses_prog.log", "w");
    while (1) {
        int ch = getch();
        fprintf(fp, "%d\n", ch);
        fflush(fp);
    }
    fclose(fp);
    endwin();
    return 0;
}

答案1

可以使用curses应用程序进行初始化initscr或者newterm。前者读的是标准输入仅有的;可以告诉后者使用不同的输入。如果你想让一个curses应用程序从管道中读取数据,你可以使用newterm对话做这个)。

curses 期望它的输入是终端。管道永远不会像终端一样工作,因为它是缓冲的,不能更改为原始模式使用标准终端I/O来电。由于其输入是缓冲的,你看不到太多有用的事情发生getch直到它能够读取整个缓冲区(很多字符,或者直到换行符,具体取决于您的测试方式)。

相关内容