2013-05-24 5 views
1

터미널에서 키보드 (키 입력) 이벤트를 수신하려면 libev를 사용하고 싶습니다. 내 생각은 curch getch()를 사용하고 notchout()을 설정하여 getch()가 다음 키 누르기를 기다리지 않도록 지시하는 것입니다.getch()의 파일 설명자

getch에서 볼 수있는 파일 설명자가 있습니까?

+0

질문을 이해하지 못했습니다. –

+1

['STDIN_FILENO'] (http://en.wikipedia.org/wiki/Standard_streams#Standard_input_.28stdin.29)? –

+0

음, 나는 stdin이 바이 패스되었다고 생각했는데, 시도해 보겠습니다. =) – Codeape

답변

2

당신이 initscr() 사용하는 경우 newt.c_lflag &= ~(ICANON);, 당신이 요청 파일 기술자가 fileno(stdin)되면,에 initscr 서브 루틴에 해당하기 때문에 :

newterm(getenv("TERM"), stdout, stdin); return stdscr; 

newterm(type, outfile, infile)을 사용하는 경우 파일 설명자가 fileno(infile)입니다.

0

이것은 getch like function입니다. 나는 지금 Windows에있어 재검사를 할 수 없습니다. 당신이
을 원한다면 그냥 듣고 문자는 다음과 같이 변경 표시하지 않도록 :

int getch(void) 
{ 
    struct termios oldt, newt; 
    int ch; 
    tcgetattr(STDIN_FILENO, &oldt); 
    newt = oldt; 
    newt.c_lflag &= ~(ICANON|ECHO); 
    tcsetattr(STDIN_FILENO, TCSANOW, &newt); 
    ch = getchar(); 
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt); 
    return ch; 
} 
2

저주 및 모든 터미널 기능은 실제로 표준 터미널 입력 및 출력 파일 설명자를 통해 실제 터미널과 통신합니다.

특수 문자 ioctl을 사용하여 플래그를 변경하거나 터미널 프로그램에서 직접 구문 분석 한 특수 제어 코드를 직접 보냅니다.

getch 기능은 당신이 파일 기술자합니다 ( <unistd.h> 헤더 파일에서) STDIN_FILENO입니다 원하는 경우 표준 입력에서 입력을 읽는 것을 의미한다.