본문 바로가기

About 배우고 익히는법/펌글

[Linux] 리눅스에서 getch() 사용

키보드 입력을 화면에 출력하지 않고 읽어오는 getch() 에 해당하는 함수가 gcc library 에는 존재하지 않습니다.
따라서 터미널의 설정을 변경하여 터미널 echo와 canonical 모드를 끄고 입력 버퍼를 1로 만든 후 키보드 입력을 읽고 터미널 설정을 원래대로 복원하는 방식으로 구현하여 사용할 수 있습니다.

#include <termio.h>

int getch(void)
{
    int ch;

    struct termios old;
    struct termios new;

    tcgetattr(0, &old);

    new = old;
    new.c_lflag &= ~(ICANON|ECHO);
    new.c_cc[VMIN] = 1;
    new.c_cc[VTIME] = 0;

    tcsetattr(0, TCSAFLUSH, &new);
    ch = getchar();
    tcsetattr(0, TCSAFLUSH, &old);

    return ch;
}