# 프로그램에서 사용자가 입력한 내용이 화면에 Echo 되지 않게 하기

 

간단하게 구현하는 방법과 조금 어렵게 구현하는 방법이 있는데 간단한 방법은 거의 모든 유닉스(리눅스)에 있는 getpass() 함수를 사용하는 방법과 조금 어렵게 구현하는 방법은 tcgetattr()과  tcsetattr()를 사용하는 방법 입니다.

 

1. getpass()

 

                 #include <unistd.h>

                 char *getpass( const char * prompt );

 

getpass() 함수는 간단히 화면에 출력할 prompt와 입력 받을 버퍼만 적어주면 되므로 무척 간단 합니다.

    ex) buf = getpass("패스워드 입력하세요 : ");

 

2. tcgetattr(), tcsetattr()

 

                 #include <termios.h>
                 #include <unistd.h>

                 int tcgetattr(int fd, struct termios *termios_p);

                 int tcsetattr(int fd, int optional_actions, struct termios *termios_p);

 

tcgetattr(), tcsetattr() 함수 양쪽 모두 터미널을  제어하기 위해 termios 구조체를 사용한다.

터미널은 보통 canonical mode 상태로 있고 이 mode에서 입력은 line으로 입력 받는다. 이 mode를 non-canonical mode 상태로 바꾸어 주어야 한다. 또한 입력 받기 전에 프로그램에서 얼마나 입력 받을 지도 정해 주어야 한다.

 

  ex) struct struct termios old, new; 

  ex) tcsetattr(fileno(stdin), TCSAFLUSH, &new)    // non-canonical mode로

  ex) tcsetattr(fileno(stdin), TCSANOW, &old);        // 다시 canonical mode로




getpass.c.html


tcsetattr.c.html



출처 : http://blog.naver.com/epoll?Redirect=Log&logNo=60004307434

저작자 표시 비영리 변경 금지
신고
◀ PREV | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ··· | 19 | NEXT ▶

BLOG main image
스스로의 삶에 반할 수 있는 사람이 되어라.. by Thremoa

공지사항

카테고리

분류 전체보기 (19)
어디로가야하나 (2)
모바일 프로그래밍 (2)
윈도우 프로그래밍 (2)
리눅스 프로그래밍 (3)
유틸리티 (1)
펌웨어 (1)

글 보관함

Total : 21,287
Today : 2 Yesterday : 4