c 에서 비밀번호를 입력받는 방법은 특별한 함수가 있는것이 아니라 대부분이
해당하는 터미날의 속성을 바꾸어서 처리 합니다. 예를 들어서 터미날 속성중
echo 부분을 제외시키면 입력한 문자가 화면에 보이지 않게 됩니다.
터미날 속성은 termios라는 구조체를 보시면 자세하게 나와 있습니다.
터미날 속성을 변경하는 방법은 먼저 tcgetattr 함수를 사용하여 termios 구조
체에 기존의 속성값을 저장한후 tcsetattr를 사용하여 속성을 변경하면 됩니
다. 그리고 모든 처리가 끝나면 이전에 저장한 termios 구조체로 tcsetattr를
호출하면 원래의 속성값으로 돌아옵니다.
예를 들어 현재 터미날에서 echo 속성를 없애는 방법은
#include
#include
int main()
{
struct termios init_term;
struct termios new_term;
Re: c 에서 비밀번호를 입력받을때...
흠...
getpass 라는 것이 있긴 했는데..
97년도에 마지막으로 써보고 못만져 봐서..
지금도 쓸수 있는 지 더 발전 되었는 지는 모르겠지만..
man 페이지가 존재하는 것을 보니 , 있는 것 같네요..
가능하시다면, passwd 프로그램의 소스를 보시지요..
smbpasswd 는 아직 이넘을 쓰는 것 같은데요..
Re: c 에서 비밀번호를 입력받을때...
c 에서 비밀번호를 입력받는 방법은 특별한 함수가 있는것이 아니라 대부분이
해당하는 터미날의 속성을 바꾸어서 처리 합니다. 예를 들어서 터미날 속성중
echo 부분을 제외시키면 입력한 문자가 화면에 보이지 않게 됩니다.
터미날 속성은 termios라는 구조체를 보시면 자세하게 나와 있습니다.
터미날 속성을 변경하는 방법은 먼저 tcgetattr 함수를 사용하여 termios 구조
체에 기존의 속성값을 저장한후 tcsetattr를 사용하여 속성을 변경하면 됩니
다. 그리고 모든 처리가 끝나면 이전에 저장한 termios 구조체로 tcsetattr를
호출하면 원래의 속성값으로 돌아옵니다.
예를 들어 현재 터미날에서 echo 속성를 없애는 방법은
#include
#include
int main()
{
struct termios init_term;
struct termios new_term;
tcgetattr(fileno(stdin), &init_term);
new_term = init_term;
new_term.c_lflag &= ~ECHO;
tcsetattr(fileno(stdin), TCSAFLUSH, &new_term);
....
tcsetattr(fileno(stdin), TCSANOW, &init_term);
}
Re: c 에서 비밀번호를 입력받을때...
흠..구지 함수까지 필요가 있나요
그럴필요 없이 윗분이 말했듯이 터미널 속성에서 echo를 제거해 주면
됩니다.그리고 getchar()같은 함수로 한문자씩 받아서 '\n'이 나오는것을
체크 하면서 *문자를 보내주면 되겠죠.
char password[BUF_SIZE]={0,};
int temp,index=0;
struct termios a,b;
tcgetattr(fileno(stdin),&a);
b=a;
b.c_lflag=~ECHO;
tcsetattr(fileno(stdin),TCSANOW,&b);
printf("Password");
while(buffer[index++]=(temp=getchar())!='\n')
putchar('*');
감사합니다. ^^*
님들.... ^^*
너무도 친절한 답변에 진심으로 감사드립니다.
정말 많은 도움이 됐습니다.
감사합니다.
간단하게
getchar()같은 함수로 한문자씩 받아서 '\n'이 나오는것을
체크 하면서 *문자를 보내주면 되겠죠
댓글 달기