>  기사  >  백엔드 개발  >  Linux에서 비차단 키보드 입력을 달성하는 방법: kbhit() 및 getch() 등가물에 대한 가이드

Linux에서 비차단 키보드 입력을 달성하는 방법: kbhit() 및 getch() 등가물에 대한 가이드

Susan Sarandon
Susan Sarandon원래의
2024-10-29 01:11:30675검색

How to Achieve Non-Blocking Keyboard Input in Linux: A Guide to kbhit() and getch() Equivalents

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.