首页 > 代码库 > 输入密码串回显*号
输入密码串回显*号
#include <stdio.h>
#include <termios.h>
static struct termios stored_settings;
static void set_keypress(void)
{
struct termios new_settings;
//存储旧的模式
tcgetattr(0,&stored_settings);
new_settings = stored_settings;
/* Disable canonical mode, and set buffer size to 1 byte */
new_settings.c_lflag &= (~ICANON); // 不使用标准模式,即取消行缓冲
new_settings.c_cc[VTIME] = 0;
new_settings.c_cc[VMIN] = 1;
new_settings.c_lflag &= ~ECHO;
tcsetattr(0, TCSANOW, &new_settings);
return;
}
static void reset_keypress(void)
{
tcsetattr(0,TCSANOW,&stored_settings); // 恢复旧模式
return;
}
/** readpasswd */
void readpasswd( char* buffer, int size)
{
char c;
int cnt = 0;
set_keypress();
while ((c = getchar()) != ‘\n‘) {
putchar(‘*‘);
buffer[cnt++] = c;
if (cnt >= size-1)
break;
}
reset_keypress();
buffer[cnt] = 0;
}
int main(int argc, char* argv[])
{
char buffer[100];
readpasswd(buffer, 100);
printf("input password:%s\n", buffer);
}
输入密码串回显*号