Я пишу упрощенную версию стандартной команды 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:
...
}
}
...
Я думал, что это вопрос очистки потока, но ни одно из подобных решений не помогло мне.Я читаю все данные из stdin до самого конца (EOF), поэтому не понимаю, почему EOF остается в буфере.
Есть ли обходной путь для этого?Я просматривал похожие вопросы, но я не нашел никакой подсказки для моей проблемы.Может быть, ncurses не является хорошим решением для моей задачи?