分类: LINUX
2010-12-30 21:06:25
之前在写ftp客户端程序的时候遇到了一个问题就是当提示你输入password的时候实现程序能够获得到用户通过键盘的输入,但是不在屏幕上显示用户输入的字符,其实就是类似于linux用户登录时候需要输入密码的时候,你输入了字符但是在屏幕上是没有任何的提示信息的。当时一直没有想到如何去实现这样的功能,所以也就没去管它,反正只是一个作业要求没那么高,但是当时自己也上网去查了一下也没有查到结果,这几天一直在看Beginning Linux Program这本书,没想到书上的第5章讲终端(Terminals)讲到了如何去实现那个功能。
1、 通过stty –g > hyfeng命令将属性保存到文件中
3、 这样看不到输入的命令是很痛苦的,因此我们在做完上面的是实验以后一定要记得恢复终端的默认属性,命令如下stty $(cat hyfeng)这些命令都得盲输,呵呵。。。。
int tcgetattr(int fildes, struct termios *termios_p);函数的作用是获得终端的属性,并将它放入到struct termios结构体中。
int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p);函数的作用是设置终端的属性。
tcflag_t c_iflag;这个变量是用来控制输入属性的
tcflag_t c_oflag;这个变量是用来控制输出属性的
tcflag_t c_cflag;这个变量是用来控制控制属性的
tcflag_t c_lflag;这个变量是用来控制本地属性的
#include
#include
#define PASSWORD_LEN 8
int main()
struct termios initialrsettings, newrsettings;
tcgetattr(fileno(stdin), &initialrsettings);
newrsettings.c_lflag &= ~ECHO;
if(tcsetattr(fileno(stdin), TCSAFLUSH, &newrsettings) != 0) {
fprintf(stderr,"Could not set attributes\n");
tcsetattr(fileno(stdin), TCSANOW, &initialrsettings);
fprintf(stdout, "\nYou entered %s\n", password);
|
chinaunix网友2011-01-03 15:08:10
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com