Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84053
  • 博文数量: 21
  • 博客积分: 547
  • 博客等级: 中士
  • 技术积分: 217
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-22 09:41
文章分类

全部博文(21)

文章存档

2013年(3)

2012年(2)

2011年(10)

2010年(6)

分类: LINUX

2010-12-30 21:06:25

之前在写ftp客户端程序的时候遇到了一个问题就是当提示你输入password的时候实现程序能够获得到用户通过键盘的输入,但是不在屏幕上显示用户输入的字符,其实就是类似于linux用户登录时候需要输入密码的时候,你输入了字符但是在屏幕上是没有任何的提示信息的。当时一直没有想到如何去实现这样的功能,所以也就没去管它,反正只是一个作业要求没那么高,但是当时自己也上网去查了一下也没有查到结果,这几天一直在看Beginning Linux Program这本书,没想到书上的第5章讲终端(Terminals)讲到了如何去实现那个功能。

要实现上面描述的功能只要去修改Linux终端的输入属性即可,在这里我们可以先通过shell命令去修改终端的属性。
通过stty -a命令可以查看当前终端的属性,显示的结果如下:
在这里我们要通过shell命令去修改终端的属性实现不显示输入的命令,在做这个实验之前最好是将终端的属性保存在文件中,以备实验完成以后恢复默认的属性。

1、 通过stty –g > hyfeng命令将属性保存到文件中

2、通过stty –echo 去修改输入的属性,在执行完这个命令以后你的终端将只会有输出不会显示你通过键盘输入的任何字符,你可以输入ls命令去判断执行是否有效,我实验结果如下图:
你输入的ls命令并没有在屏幕上显示,但是它执行的结果被显示了。

      3、 这样看不到输入的命令是很痛苦的,因此我们在做完上面的是实验以后一定要记得恢复终端的默认属性,命令如下stty $(cat hyfeng)这些命令都得盲输,呵呵。。。。

在linux下面用C实现需要用到如下的两个函数

int tcgetattr(int fildes, struct termios *termios_p);函数的作用是获得终端的属性,并将它放入到struct termios结构体中。

int tcsetattr(int fildes, int optional_actions, const struct termios *termios_p);函数的作用是设置终端的属性。

struct termios结构体,在这个结构体中包含了如下几个重要的变量

tcflag_t c_iflag;这个变量是用来控制输入属性的

tcflag_t c_oflag;这个变量是用来控制输出属性的

tcflag_t c_cflag;这个变量是用来控制控制属性的

tcflag_t c_lflag;这个变量是用来控制本地属性的

cc_t    c_cc[NCCS]

#include

#include

#define PASSWORD_LEN 8

int main()

{

    struct termios initialrsettings, newrsettings;

    char password[PASSWORD_LEN + 1];

    tcgetattr(fileno(stdin), &initialrsettings);

    newrsettings = initialrsettings;

    newrsettings.c_lflag &= ~ECHO;

 
    printf("Enter password: ");

    if(tcsetattr(fileno(stdin), TCSAFLUSH, &newrsettings) != 0) {

        fprintf(stderr,"Could not set attributes\n");

    }
    else {
        fgets(password, PASSWORD_LEN, stdin);

        tcsetattr(fileno(stdin), TCSANOW, &initialrsettings);

        fprintf(stdout, "\nYou entered %s\n", password);

    }
    exit(0);
}
因为不知道怎么插入图片所以就将pdf传上来了
文件:Linux中不显示输入的字符.pdf
大小:125KB
下载:下载
阅读(6520) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-03 15:08:10

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com