我正在为操作系统学术课程编写简化版的Linux标准 less 命令,并且我允许使用ncurses来简化操作。 "简体"表示用户应该能够使用箭头,PgUp,PgDown滚动视图,还可以使用g和G跳转命令。此外,程序应该从文件(作为参数给出的名称)或标准输入流中读取输入,如
echo "test" | ./less
从文件中读取很容易(在这种情况下没有问题),当我使用管道运算符时出现问题 - getch()一直返回-1(EOF)并且没有&# 39; t响应任何按键。我目前的代码如下:
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对我的任务来说不是一个好的解决方案吗?
答案 0 :(得分:2)
问题解决了,我在进入ncurses模式之前添加了一行:
...
freopen("/dev/tty", "rw", stdin);
// enabling ncurses mode
initscr();
...