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()함수를 구현한 것이다.)