国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 曲阳县| 修武县| 乌什县| 原平市| 垦利县| 溧阳市| 锡林郭勒盟| 庄浪县| 慈利县| 平乐县| 尉犁县| 安宁市| 怀柔区| 手游| 司法| 许昌市| 墨江| 腾冲县| 江陵县| 鸡东县| 视频| 德阳市| 宝山区| 报价| 寿宁县| 渭源县| 定陶县| 香格里拉县| 区。| 和田县| 将乐县| 沾化县| 乃东县| 贡觉县| 马尔康县| 苗栗县| 白城市| 浦东新区| 广元市| 古交市| 海阳市|