리눅스와 유닉스상에서 다르게 돌아가는 소스...질문 좀 드릴게요
글쓴이: anaud2 / 작성시간: 목, 2008/12/18 - 3:09오후
안녕하세요
GetPass라고 패스워드가 입력이 되면 *이 표시가되는 소스를 만들었습니다.
그런데 이함수가 termios구조체를 사용해서 화면을 제어하는것이라서 그런지 LINUX RHL4랑 sun os 5.9랑 전혀 다르게 동작을하네요
처음 구현은 리눅스에서 했구요 sun os 솔라리스5.9에 포팅을 하고 있는데 전혀 다르게 동작을 합니다.
리눅스상에서는 정상적으로 입력이 될때마다 *이 표시가 되고 백스페이스를 입력을 해도 지워지는데요
유닉스상에서는 *이 4개이상 입력이 되었을때 한번에 4개가 보여지게 되구요 또한 백스페이스까지는 잘되는데 화면에 변화가 없고 또한 엔터키가 안먹히네요
Termios가 운영체제에서 다르게 되는걸까요 아님 다른 문제 때문일까요 초보라서 쉽게 알아차리질 못하겠네요 동작을 안하는것도 아니구...도움좀 부탁 드리겠습니다.
#include #include #include #include static struct termios stored_settings; void echo_off(void) { struct termios new_settings; tcgetattr(0, &stored_settings); new_settings = stored_settings; new_settings.c_lflag &= (~ECHO); new_settings.c_lflag &= (~ICANON); tcsetattr(0, TCSANOW, &new_settings); return; } void echo_on(void) { tcsetattr(0, TCSANOW, &stored_settings); return; } void get_pass(char *pass) { char buf; int i=0; printf("Passwd:"); echo_off(); while( (buf = getc(stdin)) != 10 ) { if(buf != 8) { pass[i]=buf; putc(42,stdout); i++; } else { pass[i-1] = 0; putc(8,stdout); i--; } } echo_on(); } int main(void) { char test[5+1] = "\0"; GetPass("pass ", test, 5); printf("inputpass[%s]\n",test); }
Forums:
VMIN...VTIME
다음과 같이 수정하면 될 것입니다.
정말로 감사 드립니다.
이렇게 명쾌하게 해결을 해주신점~정말로 감사 드립니다.
마지막으로 궁금한게 있어서 질문을 드립니다.
termio구조체에서 제어문자 속성값 -c_cc에서
VTIME 과 VMIN은 제가 찾은 자료에는 없는데 신기하네요
제가 찾은 부분은 아래와 같습니다.
별말씀을...^^;;
KLDP 검색창에서 VTIME 을 검색해보시면 많은 좋은 내용들이 나올것입니다....^^
댓글 달기