C语言中的ncurses应用程序-阅读标准输入
我正在为OS学术课程编写Linux标准less命令的简化版本,我可以使用ncurses使其更简单。“简化”意味着用户应该能够使用箭头、PgUp、PgDown滚动视图,还可以使用g和g jump命令。此外,程序应该从文件(其名称作为参数给出)或标准输入流读取输入,如C语言中的ncurses应用程序-阅读标准输入,c,linux,stdin,ncurses,getch,C,Linux,Stdin,Ncurses,Getch,我正在为OS学术课程编写Linux标准less命令的简化版本,我可以使用ncurses使其更简单。“简化”意味着用户应该能够使用箭头、PgUp、PgDown滚动视图,还可以使用g和g jump命令。此外,程序应该从文件(其名称作为参数给出)或标准输入流读取输入,如 echo "test" | ./less 从文件中读取很容易(在本例中没有问题),当我使用管道操作符时会出现问题-getch()不断返回-1(EOF),并且不响应任何按键。我当前的代码如下所示: char c; while((c
echo "test" | ./less
从文件中读取很容易(在本例中没有问题),当我使用管道操作符时会出现问题-getch()不断返回-1(EOF),并且不响应任何按键。我当前的代码如下所示:
char c;
while((c = fget(stdin)) != EOF)
{
// reading from stdin char by char, let's say
}
// enabling ncurses mode
initscr();
keypad(stdscr, TRUE);
noecho();
cbreak();
int ch;
while(true)
{
ch = getch();
switch(ch)
{
case KEY_LEFT:
...
}
}
...
我原以为这是冲溪的问题,但没有一个类似的解决方案对我有效。我从stdin读取所有数据,直到最后(EOF),所以我不明白为什么EOF会留在缓冲区中
有什么解决办法吗?我浏览过类似的问题,但我没有找到任何解决问题的线索。也许ncurses对我的任务不是一个好的解决方案?问题解决了,我在进入ncurses模式之前添加了一行:
...
freopen("/dev/tty", "rw", stdin);
// enabling ncurses mode
initscr();
...
为您自己的问题添加一个答案!过了一天左右,你也可以接受。我本来想接受的,但我的名声太小,不能马上接受;)“声誉低于100的用户在提问后8小时内无法回答自己的问题。”