库 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;
}
curses 应用程序可以使用
initscr
或初始化newterm
。前者只读取标准输入;可以告诉后者使用不同的输入。如果你想让一个 curses 应用程序从管道中读取,你会使用newterm
( dialog这样做)。curses 期望它的输入是一个终端。管道永远不会像终端一样工作,因为它是缓冲的,不能使用标准终端 I/O调用将其更改为原始模式。由于它的输入是buffered ,因此在它能够读取整个缓冲区(大量字符或直到换行符,具体取决于您的测试方式)之前,您不会看到太多有用的事情发生。
getch