Linux 不回显输入代码

来源:互联网 发布:江苏网络协会 编辑:程序博客网 时间:2024/06/05 10:00
int new_getpass(char* dest, int ml)
{
struct termios oldflag, newflag;//保存原有终端属性和新设置的终端属性
int len;

tcgetattr(fileno(stdin), &oldflag);//获得终端原有属性并保存在结构体oldflag

//设置新的终端属性,让输入时终端不会显

newflag = oldflag;
newflag.c_lflag &= ~ECHO;
newflag.c_lflag |= ECHONL;

//不等待数据结束立即改原变终端属性为新的终端属性

if(tcsetattr(fileno(stdin), TCSANOW, &newflag) != 0)
{
perror("tcsetattr");
return -1;
}

fgets(dest, ml, stdin);//从标准输入读取数据保存到dest,长度为ml
len = strlen(dest);
if(len > ml - 1)
{
len =ml -1;
}
dest[len-1] = 0;

//让终端恢复为原有的属性

if(tcsetattr(fileno(stdin), TCSANOW, &oldflag) != 0)
{
perror("tcsetattr");
return -1;
}

return 0;
}
0 0