红联Linux门户
Linux帮助

linux密码输入显示*

发布时间:2016-06-24 15:42:19来源:linux网站作者:bewinged

搜到的大多是不显示*的,有些是显示*但是无法使用退格键,或者中断。故自己参考修改实现:


#include <stdio.h> 
#include <termios.h> 
#include <unistd.h> 
 
int getch(void) 

struct termios tm, tm_old; 
int fd = STDIN_FILENO, c; 
if(tcgetattr(fd, &tm) < 0) 
return -1; 
tm_old = tm; 
#if 0 
cfmakeraw(&tm); 
#else  

//  tm.c_lflag &= ~ECHO; 
//tm.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN); 

tm.c_lflag &= ~(ECHO | ECHONL | ICANON ); 
//  tm.c_lflag &= ~ECHOE; 
//  tm.c_cc[] =  
//  tm.c_iflag &= ~(IXON); 
//  tm.c_oflag &= ~OPOST; 
//  tm.c_oflag |= (BSDLY); 

#endif 
if(tcsetattr(fd, TCSANOW, &tm) < 0) 
return -1; 
c = fgetc(stdin); 
if(tcsetattr(fd, TCSANOW, &tm_old) < 0) 
return -1; 
return c; 

void GetString(char *buf) { 
int i; 
char ch; 

i = 0; 
while(1) { 
ch = getch(); 
//  printf("%d%d",ch,ch); 
if (ch == '\n') { 
//printf("end\n"); 
break; 
} else if (ch == 127) { 
if (i > 0) { 
printf("\b \b"); 
buf[--i] = '\0'; 

i--; 

} else { 
buf[i] = ch; 
//printf("%d", i); 
printf("*"); 

i++; 

buf[++i] = '\0'; 
printf("\n"); 

int main(void) { 
char password1[256] = {0}; 
char password2[256] = {0}; 

printf("Password:"); 
GetString(password1); 
printf("Verify:"); 
GetString(password2); 
if (strncmp(password1, password2, 256) == 0) { 
printf("Set Password Ok!\nPassword:%s\n", password1); 

} else { 
printf("Verify Error!\n%s is not equal %s\n", password1, password2); 

return 0; 
}


以上代码实现linux密码输入显示*。


本文永久更新地址://m.ajphoenix.com/linux/21806.html