int new_getpass(char* dest, int ml)
{
struct termios oldflag, newflag; //保存原有终端属性和新设置的终端属性
int len;
tcgetattr(fileno(stdin), &oldflag); //获得终端原有属性并保存在结构体oldflag
newflag.c_lflag &= ~ECHO;
newflag.c_lflag |= ECHONL;
{
perror("tcsetattr");
return -1;
}
fgets(dest, ml, stdin); //从标准输入读取数据保存到dest,长度为ml
len = strlen(dest);
if(len > ml - 1)
{
len =ml -1;
}
dest[len-1] = 0;
{
perror("tcsetattr");
return -1;
}
return 0;
}
{
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;
}