1. 程式人生 > >Linux 不回顯輸入程式碼

Linux 不回顯輸入程式碼

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;
}