在C中读取应用程序 - 阅读标准输入

时间:2011-12-16 16:47:34

标签: c linux stdin ncurses getch

我正在为操作系统学术课程编写简化版的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对我的任务来说不是一个好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

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

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