护士应用程序在C -读取标准输入



我正在为OS学术类编写Linux标准less命令的简化版本,并且允许我使用护士使其更容易。"简化"意味着用户应该能够使用箭头、PgUp、PgDown滚动视图,还可以使用g和g跳转命令。此外,程序应该从文件(文件名作为参数给出)或标准输入流(如

)中读取输入。
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模式前添加了一行:

...
freopen("/dev/tty", "rw", stdin);
// enabling ncurses mode
initscr();
...

最新更新