kbhit() 및 getch() 등가물을 사용하여 Linux에서 키보드 입력에 액세스
제공된 Windows 코드는 플랫폼별 함수 _kbhit( ) 및 _getch()를 사용하여 프로그램 루프를 중단하지 않고 키보드 입력을 모니터링합니다. 그러나 이러한 기능은 Linux 시스템에서 사용할 수 없으므로 대체 접근 방식이 필요합니다.
POSIX 호환 kbhit() 동등
Linux 시스템에 conio.h 헤더가 없는 경우 kbhit()을 지원하는 경우 Morgan Mattews의 구현 활용을 고려해 보세요. 이 솔루션은 모든 POSIX 호환 시스템에서 kbhit() 기능을 에뮬레이트합니다.
getchar() 문제 해결
termios 수준에서 버퍼링을 비활성화하면 kbhit() 문제뿐만 아니라 문제일 뿐만 아니라 제공된 리소스에 설명된 대로 getchar()와 관련된 모든 문제도 해결합니다. 이 접근 방식을 사용하면 Enter 키 누르기를 기다리지 않고 즉시 입력을 받을 수 있습니다.
예제 코드와 통합
제공된 예제 코드를 Linux 시스템에 적용하려면 _kbhit 교체를 고려하세요. () 및 _getch()를 POSIX 호환 해당 항목과 함께 사용합니다. 아래 수정된 코드는 이러한 통합을 보여줍니다.
<code class="cpp">#include <termios.h> #include <unistd.h> #include <iostream> int main() { // Disable input buffering termios oldt, newt; tcgetattr(STDIN_FILENO, &oldt); newt = oldt; newt.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newt); while (true) { if (kbhit()) { char c = getchar(); if (c == 'g') { std::cout << "You pressed G" << std::endl; } } sleep(500); std::cout << "Running" << std::endl; } // Restore input buffering tcsetattr(STDIN_FILENO, TCSANOW, &oldt); return 0; }</code>
이 수정된 코드는 Mattews의 kbhit() 구현을 활용하고 입력 버퍼링을 비활성화하여 원래 Windows 코드와 유사한 기능을 달성합니다.
위 내용은 Linux에서 비차단 키보드 입력을 달성하는 방법: kbhit() 및 getch() 등가물에 대한 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!