Readline() 함수 사용하여 Exit 할경우 문제 (source 소스 포함)
글쓴이: 안상준 / 작성시간: 수, 2003/08/20 - 10:56오전
아래와 같이 30초후에 Exit 되면 그 다음부터는 readline 함수의 영향으로 입력은 되지만 입력된 값은 안보입니다. 그렇지만 실제로는 그 값이 입력되어 있습니다. 그리고 enter를 치면 enter가 무시됩니다. 아마 readline의 영향인거 같습니다. readline 함수가 리턴할때는 \n을 제외한 문자열을 리턴합니다.
어떻게 해결할 수 있나요? 도움 부탁드립니다.
컴파일 방법.
gcc -o readline_exit readline_exit.c -Wall -lreadline -lncurses
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <readline/readline.h> #include <readline/history.h> int g_iCnt = 0; void alarm_handler (int sig) { if (g_iCnt > 30) { printf("program is exit\n"); exit(0); } g_iCnt++; signal (SIGALRM, alarm_handler); alarm (1); } int main(int argc, char *argv[]) { char prompt[64]; char *line; signal (SIGALRM, alarm_handler); alarm (1); while(1) { strcpy(prompt, "(input)$ "); line = readline (prompt); printf("line = [%s]\n", line); free(line); } }
Forums:
stty 로 다시 설정할수는 있습니다.
반향값(echo)를 무시한다면 stty로 다시 바꿔주면 됩니다.
stty echo
라고 명령을 내리시면 됩니다.
========================================
* The truth will set you free.
문제 해결
답변에서 아이디어를 얻어서 tty를 원상태로 돌려 놓을 수 있도록 해서 해결하였습니다. 답변 감사합니다.
해결한 코드는 아래입니다. readline을 하기 전에 tty 세팅을 저장했다가 exit 하기전에 처음 tty 상태로 reset를 하였습니다.
댓글 달기