linux 不能输入字符,Linux中不显示输入的字符的实现

之前在写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传上来了

pdf.gif文件:Linux中不显示输入的字符.pdf

大小:125KB

下载:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值