2011-12-16 13 views
3

Linux標準の簡略版をより少なく、コマンドをOSの学問クラスに使用しています.ncursesを使って簡単にすることができます。 「Simplified」は、矢印、PgUp、PgDownで表示をスクロールし、gおよびGジャンプコマンドを使用できるようにする必要があることを意味します。ファイルからの読み込みC言語のncursesアプリ - 標準入力の読み込み

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は私の仕事のための良い解決策ではないでしょうか?

+1

は、あなた自身の質問に答えを追加します!それから1日かそこらの後にそれを受け入れることもできます。 –

+0

私はそうしたいと思っていましたが、すぐにそれを行うという評判はあまりありません;) "評判が100未満のユーザーは、質問してから8時間は自分の質問に答えることができません。 – PiotrK

+0

さてさて。 :-) –

答えて

2

問題が解決し、私はncursesのモードに入る前に1行を追加しました:

... 
freopen("/dev/tty", "rw", stdin); 
// enabling ncurses mode 
initscr(); 
... 
関連する問題