Windows/DOS 환경에서 지원하는 Turbo C에서는 "conio.h"라는 패키지에서 getch(), getche()함수를 지원한다. 하지만, gcc를 이용한 컴파일에 사용되는 glibc에는 stdio.h/stdlib.h를 눈을 뒤집어 쓰고 찾아봐도 위 함수를 지원하지 않는다.

 그럼 리눅스에서는 이런함수를 어떻게 대체해서 쓸까? 찾아본 결과, 아래와 같이 대체하여 쓸 수 있다고 한다!!

/* 꼭 include 해주도록 한다. */
#include <termios.h>
#include <unistd.h>

char getche_linux(void) {
    struct termios oldt, newt;
    int ch;
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    newt.c_lflag &= ~(ICANON | ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    ch = getchar();
    printf("%c", ch);
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    return ch;
}

 위의 진한 소스코드 부분을 조금더 응용하여, 진한 부분을

 printf("*");로 치환하게 되면 비밀번호를 입력하는 형태의 입력 방식을 구현할 수 있다. 또한 printf()명령을 사용하지 않으면 getch함수를 구현할 수 있다. (위의 함수는 getche()함수를 구현한 것이다.)

Posted by WebPeace

사이드바 열기