터미널에서 키보드 (키 입력) 이벤트를 수신하려면 libev를 사용하고 싶습니다. 내 생각은 curch getch()를 사용하고 notchout()을 설정하여 getch()가 다음 키 누르기를 기다리지 않도록 지시하는 것입니다.getch()의 파일 설명자
getch에서 볼 수있는 파일 설명자가 있습니까?
터미널에서 키보드 (키 입력) 이벤트를 수신하려면 libev를 사용하고 싶습니다. 내 생각은 curch getch()를 사용하고 notchout()을 설정하여 getch()가 다음 키 누르기를 기다리지 않도록 지시하는 것입니다.getch()의 파일 설명자
getch에서 볼 수있는 파일 설명자가 있습니까?
당신이 initscr()
사용하는 경우 newt.c_lflag &= ~(ICANON);
, 당신이 요청 파일 기술자가 fileno(stdin)
되면,에 initscr 서브 루틴에 해당하기 때문에 :
newterm(getenv("TERM"), stdout, stdin); return stdscr;
newterm(type, outfile, infile)
을 사용하는 경우 파일 설명자가 fileno(infile)
입니다.
이것은 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;
}
저주 및 모든 터미널 기능은 실제로 표준 터미널 입력 및 출력 파일 설명자를 통해 실제 터미널과 통신합니다.
특수 문자 ioctl
을 사용하여 플래그를 변경하거나 터미널 프로그램에서 직접 구문 분석 한 특수 제어 코드를 직접 보냅니다.
이
은getch
기능은 당신이 파일 기술자합니다 (
<unistd.h>
헤더 파일에서)
STDIN_FILENO
입니다 원하는 경우 표준 입력에서 입력을 읽는 것을 의미한다.
질문을 이해하지 못했습니다. –
['STDIN_FILENO'] (http://en.wikipedia.org/wiki/Standard_streams#Standard_input_.28stdin.29)? –
음, 나는 stdin이 바이 패스되었다고 생각했는데, 시도해 보겠습니다. =) – Codeape