使用termios结构的密码程序

使用termios结构的密码程序

在这个简单的例子中,用户输入密码信息,但并不会显示用户输入的内容。

//密码程序passwd.c以下面的定义开始:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<termios.h>

#define STRLEN 128

int main()
{
    struct termios initialrsettings,newrsettings;
    char passwd[STRLEN] = {0};

//接下来,增加一行语句来获取标准输入的当前设置,并把这些值保存到刚才创建的termios结构
tcgetattr(fileno(stdin),&initialrsettings);

//对原始的设置值做一份副本以便在程序结束时还原设置。在termios结构变量newrsettings中关闭ECHO标志。
    newrsettings = initialrsettings;
    newrsettings.c_lflag &= ~ECHO;

    printf("Password: ");

//用newrsettings变量中的值设置终端属性并读取用户输入的密码。最后,将终端属性还原到原来的属性。
    if(tcsetattr(fileno(stdin),TCSAFLUSH,&newrsettings) != 0)
    {
        fprintf(stderr,"Could not set attributes\n");
    }
    else
    {
        fgets(passwd,STRLEN,stdin);
        passwd[strlen(passwd)-1] = 0;
        tcsetattr(fileno(stdin),TCSANOW,&initialrsettings);

        //这里将输入的密码输出出来,实际中不用
        fprintf(stdout,"\n%s\n",passwd);
    }
    exit(0);
}

运行结果:
这里写图片描述

  1. 请注意只修改需要修改的标志,使用的语法结构是x &= ~FLAG(它的作用是清楚变量x中由FLAG标志定义的比特)。如果需要,你可以用语法结构x |= FLAG对由FLAG标志定义的单个比特进行置位。

  2. 在设置终端属性时,用TCSAFLUSH丢弃用户在程序准备好读取数据之前输入的任何内容。这样的处理方式是为了培养用户的一个好习惯,即在回显功能关闭之前不要输入自己的密码。在程序结束前,还恢复了终端的原始设置。

  3. termios结构的另一种常见用法是,将终端设置成这样一种状态:一旦输入字符,程序就会立即读取它。只是通过关闭标准模式并结合使用MIN和TIME设置来实现的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值