我正在为 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 不是我的任务的好解决方案?