私は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:
...
}
}
...
ストリームをフラッシュすることだと思いましたが、同様の解決策はどれもうまくいきませんでした。stdinから最後まで(EOF)まですべてのデータを読み取ったので、EOFがバッファーに残っている理由がわかりません。
これに対する回避策はありますか?同様の質問を閲覧しましたが、問題の手がかりは見つかりませんでした。たぶんncursesは私のタスクにとって良い解決策ではありませんか?