2011-12-16 5 views
3

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

자신의 질문에 대한 대답을 추가! 하루가 지나면 그것을 받아 들일 수도 있습니다. –

+0

나는 그렇게하고 싶었지만 당장에는 그렇게할만한 명성이 너무 적었습니다.) "명성이 100 명 미만인 사용자는 요청한 후 8 시간 동안 자신의 질문에 답변 할 수 없습니다." – PiotrK

+0

이제 좋습니다. :-) –

답변

2

문제 해결, 나는 ncurses를 모드에 들어가기 전에 한 줄을 추가 :

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