3

私は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は私のタスクにとって良い解決策ではありませんか?

4

1 に答える 1

2

問題は解決しました。ncursesモードに入る前に1行追加しました。

...
freopen("/dev/tty", "rw", stdin);
// enabling ncurses mode
initscr();
...
于 2011-12-17T12:40:19.437 に答える