Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的ncurses应用程序-阅读标准输入_C_Linux_Stdin_Ncurses_Getch - Fatal编程技术网

C语言中的ncurses应用程序-阅读标准输入

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

我正在为OS学术课程编写Linux标准less命令的简化版本,我可以使用ncurses使其更简单。“简化”意味着用户应该能够使用箭头、PgUp、PgDown滚动视图,还可以使用g和g jump命令。此外,程序应该从文件(其名称作为参数给出)或标准输入流读取输入,如

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小时内无法回答自己的问题。”