>  기사  >  백엔드 개발  >  Linux에서 입력을 처리하는 방법: kbhit() 및 getch()의 대안?

Linux에서 입력을 처리하는 방법: kbhit() 및 getch()의 대안?

Patricia Arquette
Patricia Arquette원래의
2024-10-28 05:43:30470검색

How to Handle Input in Linux: An Alternative to kbhit() and getch()?

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

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