麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Linux > 正文

Linux下接收用戶輸入密碼的完美實現

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

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

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

3)我最終在2)的基礎上,實現了用'*'代替用戶的輸入,并且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);

}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品久久久久久久不卡 | www.com国产精品 | 午夜视频导航 | 国产成人自拍视频在线 | 中文字幕在线观看亚洲 | 久久久久久免费 | 欧美成年人视频在线观看 | 91九色视频在线播放 | 亚洲第一成人在线观看 | 欧美黄色片免费看 | 国内毛片视频 | 久久久久久久爱 | 成人性视频在线 | 国产免费区 | av日韩一区二区三区 | 亚洲激情91 | 中文字幕欧美一区二区三区 | 99riav国产在线观看 | 久草在线手机视频 | 国产亚洲综合一区二区 | 国产一级伦理片 | 亚洲视频在线视频 | 久国产精品视频 | chinese18 xxxx videos| 一级黄色大片在线观看 | 久久蜜桃香蕉精品一区二区三区 | 福利在线播放 | 91成人久久 | 黄色毛片免费视频 | 中文字幕在线免费 | 亚洲电影在线播放 | 久久精品网站视频 | 免看黄大片aa | 黄色成年在线观看 | 日韩中文字幕一区二区三区 | 97香蕉超级碰碰久久免费软件 | 成人在线观看一区二区 | 国产1区2区在线 | 在线91观看 | 国产999视频在线观看 | 在线看一区二区三区 |