Я пишу упрощенную версию стандартной команды 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 не подходит для моей задачи?