Linux의 입력 처리: kbhit() 및 getch()의 대안
Windows에서는 _kbhit() 및 _getch() 함수 프로그램을 중단하지 않고 키보드 입력을 확인하는 간단한 방법을 제공합니다. 그러나 Linux에서는 이러한 기능을 사용할 수 없습니다. 이 기사에서는 Linux에서 입력을 처리하는 대체 접근 방식을 살펴봅니다.
Morgan Mattews의 코드
한 가지 해결책은 Morgan Mattews가 제공하는 코드를 활용하는 것입니다. _kbhit()을 POSIX 호환 방식으로 사용합니다. 여기에는 termios 수준에서 버퍼링을 비활성화하는 작업이 포함됩니다.
getchar() 문제
termios 버퍼링을 비활성화하면 _kbhit() 부재 문제를 해결할 뿐만 아니라 getchar() 문제도 해결됩니다. 입력 버퍼링을 방지하여
예
<code class="c">#include <stdio.h> #include <termios.h> int kbhit() { struct termios oldt, newt; int ch; int oldf; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); oldf = fcntl(STDIN_FILENO, F_GETFL, 0); fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK); ch = getchar(); tcsetattr(STDIN_FILENO, TCSANOW, &oldt); fcntl(STDIN_FILENO, F_SETFL, oldf); if (ch != EOF) { ungetc(ch, stdin); return 1; } return 0; } int main() { while (true) { if (kbhit()) { char c = getchar(); if (c == 'g') { printf("You pressed G\n"); } } printf("Running\n"); sleep(1); } return 0; }</code>
위 내용은 Linux에서 입력을 처리하는 방법: kbhit() 및 getch()의 대안?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!