国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Linux下接收用戶輸入密碼的完美實現(xiàn)

2024-08-28 00:19:53
字體:
供稿:網(wǎng)友
一個小問題,在linux編一個接收用戶輸入密碼小程序,不顯示密碼。google和baidu了一下,竟然沒有找到現(xiàn)成的,好吧,自己編一個。哪里想到,竟然一波三折。哈哈,最終還是搞定了!

1) 很容易根據(jù)termios的結(jié)構(gòu)屏蔽終端屬性的輸出。
但是,這樣一來,用戶的輸入不顯示在屏幕上。用戶不知道自己輸入的個數(shù)。對輸入的內(nèi)容心里也沒有底。非常不方便。

2)于是改為一個一個字符的處理格式。編程實現(xiàn)了用'*'代替用戶的輸入。但是這樣linux處于非授權(quán)模式,一個限制是‘退格’鍵不能用。用戶必須保證一次輸入正確,萬一錯了的話,只能眼睜睜的重新運行程序,重來一次。

3)我最終在2)的基礎(chǔ)上,實現(xiàn)了用'*'代替用戶的輸入,并且backspace key可用。

附代碼:
#include
#include

#define passLength 100

int main(int argc, char **argv)
{
struct termio tio, tin;
char*password =(char*)malloc(passLength);
char*b=password;

ioctl(0, TCGETA, &tio);
tin = tio;
tin.c_lflag &= ~ECHO; /* turn off ECHO */
tin.c_lflag &= ~ICANON; /* turn off ICANON */
tin.c_lflag &= ~ISIG;
tin.c_cc[VINTR]=1;
tin.c_cc[VMIN]=1;
tin.c_cc[VTIME]=0;
/*
* Set the new modes. Again we ignore return
* values.
*/
ioctl(0,TCSETA,&tin);

char selected;
int order=0;
printf("Enter password:");
do{
selected =fgetc(stdin);
if((selected=='/b')&&(order>0))
{
fputc('/b',stdout);
fputc(' ',stdout);
fputc('/b',stdout);
order--;
password--;
*password='/0';
}else if((selected!='/n')&&(selected!='/r')&&(selected!='/b'){

*password++=selected;
order++;
fputc('*',stdout);
fflush(stdout);
}
}while ((selected!='/n')&&(selected!='/r')&&(order>=0)&&(order
/*
* Reset the old tty modes.
*/
ioctl(0, TCSETA, &tio);
fprintf(stdout,"/nYou entered: %s/n",b);
free(b);
exit(0);

}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 布尔津县| 黄山市| 新野县| 中方县| 改则县| 永清县| 东丽区| 突泉县| 喀什市| 朝阳县| 商河县| 陇川县| 浮山县| 宜春市| 平湖市| 静乐县| 晋城| 安西县| 漳浦县| 沙田区| 甘洛县| 上高县| 石首市| 平罗县| 溧水县| 大姚县| 河津市| 嘉兴市| 恩施市| 阳山县| 皮山县| 米脂县| 延安市| 綦江县| 荆门市| 无极县| 社旗县| 潜江市| 独山县| 油尖旺区| 双辽市|