Linux 不回顯輸入程式碼
阿新 • • 發佈:2019-01-22
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;
if(tcsetattr(fileno(stdin), TCSANOW, &oldflag) != 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;
//讓終端恢復為原有的屬性
{
perror("tcsetattr");
return -1;
}
return 0;
}