2011-12-16 79 views
3

我正在寫一個Linux標準的簡化版本命令的OS學術類,我允許使用ncurses使它更容易。 「簡化」意味着用戶應該能夠用箭頭,PgUp,PgDown滾動視圖,並且還可以使用g和G跳轉命令。此外,程序應該從文件中讀取(它的名稱作爲參數),其輸入之一或標準輸入流,像ncurses在C中的應用程序 - 讀標準輸入

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不是我的任務的好解決方案?

+1

的答案添加到您自己的問題!然後過了一天左右,你也可以接受它。 – 2011-12-16 17:45:29

回答

2

問題解決了,我增加了一個行中輸入的ncurses模式之前:

... 
freopen("/dev/tty", "rw", stdin); 
// enabling ncurses mode 
initscr(); 
...