리눅스 에서 콘솔 프로그램 작성할때 getchar()이나 scanf()로 키를 입력받을시에
LF문자 처리때문에 골치가 아픕니다
콘솔에서 키 입력 받을때 키를 눌고 엔터를 누르지 않아도 바로 키입력이 처리되는
루틴을 작성하고 싶은데 어떡해야 하나요?
예를 들어서 "y 또는 n으로 입력해주세요"라고 띄운다음 y나 n키를 누르고 엔터를
치지 않아도 y를 누르면 바로 다음 루틴이 실행될수 있게요..
리눅스 콘솔에서 표준함수로 그런 역할을 해 주는 함수는 없습니다.
curses 라이브러리에 포함된 getch() 라는 함수가 원하시는 것을
제공하긴 합니다.
자세한건 curses 라이브러리를 살펴보시는 것이 좋을듯 싶습니다.
UNIX System Programming 이라는 책에도 이 curses 에 대해서
간략하게 설명된 부분이 있죠..
man termios 를 치시고 거기서 비정규입력(non canonical input)에 대해서 살펴보시기 바랍니다. 일반적으로 몇몇 프로그램에서 정규입력보다 비정규입력을 사용해야 하는 특별한 경우에 사용됩니다. 간단하게 struct termios를 통해서 구현할 수 있습니다. 흠... 시간도 있으니.. 간단하게 하나 예를 드리면 아래처럼 터미널을 제어해서 쉽게 해결할 수 있죠. 아 참 원래는 getc 대신 read로 구현하는게 원래는 좋습니다. 그래야 여러개의 문자를 처리가능하니까요.
char input;
struct termios term_cc, old_cc;
tcgetattr(0, &term_cc);
old_cc = term_cc; /* 현재 설정 기억 */
term_cc.c_cc[VMIN] = 1; /* 최소 입력 요구 문자수 */
term_cc.c_cc[VTIME] = 50; /* 5초 기다림 */
term_cc.c_lflag &= ICANON; /* 비정규입력 */
term_cc.c_lflag &= ~ECHO; /* 반향 금지 */
tcsetattr(0, TCSANOW, &term_cc);
input = (int) getc(stdin);
printf("Your input : %c\n", input);
tcsetattr(0, TCSANOW, &old_cc);
========================================
* The truth will set you free.
헉...설마 getch() 를 모르셔서? 질문 하신건가요?
헉...
설마 getch() 를 모르셔서? 질문 하신건가요?
getch()
리눅스 콘솔에서 표준함수로 그런 역할을 해 주는 함수는 없습니다.
curses 라이브러리에 포함된 getch() 라는 함수가 원하시는 것을
제공하긴 합니다.
자세한건 curses 라이브러리를 살펴보시는 것이 좋을듯 싶습니다.
UNIX System Programming 이라는 책에도 이 curses 에 대해서
간략하게 설명된 부분이 있죠..
비정규입력에 대해서 보시면 됩니다.
man termios 를 치시고 거기서 비정규입력(non canonical input)에 대해서 살펴보시기 바랍니다. 일반적으로 몇몇 프로그램에서 정규입력보다 비정규입력을 사용해야 하는 특별한 경우에 사용됩니다. 간단하게 struct termios를 통해서 구현할 수 있습니다. 흠... 시간도 있으니.. 간단하게 하나 예를 드리면 아래처럼 터미널을 제어해서 쉽게 해결할 수 있죠. 아 참 원래는 getc 대신 read로 구현하는게 원래는 좋습니다. 그래야 여러개의 문자를 처리가능하니까요.
========================================
* The truth will set you free.
댓글 달기