3

我正在为 OS 学术课程编写 Linux 标准less命令的简化版本,并且允许我使用 ncurses 使其更容易。“简化”意味着用户应该能够使用箭头、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:
        ...
    }
}

...

我认为这是刷新流的问题,但没有一个类似的解决方案对我有用。我从标准输入读取所有数据,直到最后(EOF),所以我不明白为什么 EOF 留在缓冲区中。

有什么解决方法吗?我浏览过类似的问题,但我没有找到任何线索来解决我的问题。也许 ncurses 不是我的任务的好解决方案?

4

1 回答 1

2

问题解决了,我在进入ncurses模式前加了一行:

...
freopen("/dev/tty", "rw", stdin);
// enabling ncurses mode
initscr();
...
于 2011-12-17T12:40:19.437 回答