카테고리 없음
Linux에서 getch() 구현하기
벅스바니
2010. 1. 19. 15:33
리눅스에서는 기본적으로 문자단위를 지원하지 않기 때문에,
getchar()를 하더라도 enter가 한번 들어가 줘야합니다.
당연하 도스의 getch()는 에러가 납니다.
때문에 한 글자만 받으려면 따로 함수를 만들어줘야합니다.
간단하게 구현된 함수입니다..
termios.h는 POSIX에서 규정하는 표준 Terminal I/O에 대한 설정입니다.
unistd.h 또한 POSIX에서 규정는 내용으로, Unicode/UTF-8 및 기타 표준 라이브러리가 들어있는 것으로
추정됩니다.(자세한 자료가 없어서리...)
#include <termios.h>
#include <unistd.h>
int getch(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();
tcsetattr(STDIN_FILENO,TCSANOW,&oldt);
return ch;
}
#include <unistd.h>
int getch(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();
tcsetattr(STDIN_FILENO,TCSANOW,&oldt);
return ch;
}