linux系统下解决getch()输入数值不回显示

在linux系统下开发C 程序却会遇到系统不支持conio.h头文件,无法使用getch()不回显函数。下面就演示如何构建函数实现数值输入不回显。

  1 #include <stdio.h>
  2
  3 #include <termios.h>
  4
  5 #include <unistd.h>
  6
  7 #include <errno.h>
  8
  9 #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)
 10
 11 //函数set_disp_mode用于控制是否开启输入回显功能
 12
 13 //如果option为0,则关闭回显,为1则打开回显
 14
 15 int set_disp_mode(int fd,int option)
 16
 17 {
 18
 19    int err;
 20
 21    struct termios term;
 22
 23    if(tcgetattr(fd,&term)==-1){
 24
 25      perror("Cannot get the attribution of the terminal");
 26
 27      return 1;
 28
 29    }
 30
 31    if(option)
 32
 33         term.c_lflag|=ECHOFLAGS;
 34
 35    else
 36
 37         term.c_lflag &=~ECHOFLAGS;
 38
 39    err=tcsetattr(fd,TCSAFLUSH,&term);
 40
 41    if(err==-1 && err==EINTR){
 42
 43         perror("Cannot set the attribution of the terminal");
 44
 45         return 1;
 46
 47    }
 48
 49    return 0;
 50
 51 }
 52
 53 //函数getpasswd用于获得用户输入的密码,并将其存储在指定的字符数组中
 54
 55 int getpasswd(char* passwd, int size)
 56
 57 {
 58
 59    int c;
 60
 61    int n = 0;
 62
 63
 64
 65    printf("Please Input password:");
 66
 67
 68
 69    do{
 70
 71       c=getchar();
 72
 73       if (c != ‘\n‘|c!=‘\r‘){
 74
 75          passwd[n++] = c;
 76
 77       }
 78
 79    }while(c != ‘\n‘ && c !=‘\r‘ && n < (size - 1));
 80
 81    passwd[n] = ‘\0‘;
 82
 83    return n;
 84
 85 }
 86
 87 int main()
 88
 89 {
 90
 91    char *p,passwd[20],name[20];
 92
 93    printf("Please Input name:");
 94
 95    scanf("%s",name);
 96
 97    getchar();//将回车符屏蔽掉
 98
 99    //首先关闭输出回显,这样输入密码时就不会显示输入的字符信息
100
101    set_disp_mode(STDIN_FILENO,0);
102
103    //调用getpasswd函数获得用户输入的密码
104
105    getpasswd(passwd, sizeof(passwd));
106
107    p=passwd;
108
109    while(*p!=‘\n‘)
110
111      p++;
112
113    *p=‘\0‘;
114
115    printf("\nYour name is: %s",name);
116
117    printf("\nYour passwd is: %s\n", passwd);
118
119    printf("Press any key continue ...\n");
120
121    set_disp_mode(STDIN_FILENO,1);
122
123    getchar();
124
125    return 0;
126
127 }
128
129
130
131
132
133  

运行结果:

说明:Linux下C编程遇到要输入密码的问题,可输入的时候密码总不能让人看见吧,本来想用getch()来解决输入密码无回显的问题的,不料Linux-C中不支持getch(),我也没有找到功能类似的函数代替,上面这个例子达到了预期的效果。

时间: 2024-08-10 19:35:41

linux系统下解决getch()输入数值不回显示的相关文章

linux系统下的getch和getche函数的实现

首先要知道:getch与getche是在conio.h这个头文件里面的,但是,但是conio.h这个文件不是c语言的标准库文件,所以在linux的gcc下是没有这个头文件的,而我们大多数人使用的主要是getch与getche函数,因为getchar函数的功能不是很强大,言归正传,先灌输一些关于linux的知识 stty是一个用来改变并打印终端行设置的常用命令. 1 ,在命令行下,禁止输出大写的方法 stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enter

Linux系统下ssh登陆很慢的解决办法

Linux系统下ssh登陆很慢怎么办?很多的Linux用户发现连接上Linux服务器在输入用户名之后还要再等一下才能输入密码,时间过长了,现在小编与大家分享一下如何解决ssh登陆问题的问题,需要的朋友可以参考下 很多的Linux用户发现连接上Linux服务器在输入用户名之后还要再等一下才能输入密码,时间过长了,现在小编与大家分享一下如何解决ssh登陆问题的问题,希望对您有所帮助 . 1.我们平时登陆Linux服务器的时候,都需要在输入用户名之后再等待一下,这个时间因不同而等的时间不一样. 2.其

解决linux系统下因分区目录划分过小,导致tomcat使用系统临时文件夹(/tmp)没有足够空间而报错的问题

1. 故障现象. B/S应用进行文件上传后,系统反馈:没有足够的磁盘空间(No enough space available). 2. 故障分析 检查文件占用情况如下: [root@Qa2 /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 6.7G 6.7G 20k 100% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/sh

linux系统下,警告:warning: implicit declaration of function ‘gets’ [-Wimplicit-function-declaration] 和 warning: the `gets&#39; function is dangerous and should not be used. 的由来和解决方法。

字符数组 的英文名字是 char [] gets()函数的基本用法为:char *gets(char *s); 该函数的参数是一个字符数组,该函数的返回值也是一个字符数组. linux下的代码如下: 1 #include <stdio.h> 2 3 int main() 4 { 5 char a[100] = { 0 }; 6 gets(a); 7 printf("%s\n", a); 8 return 0; 9 }-----------------------------

解决Linux系统下Mysql数据库中文显示成问号的问题

当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打开Linux窗口,启动mysql. 连接mysql输入show variables like '%char%'; 出现如下图,这样的话在linux下操作mysql会出现中文乱码,所以我们要解决这个问题. 关闭mysql,找到 /etc/my.cnf 文件 3.1 如果没有找到my.cnf文件,就从

Linux系统下不让MySQL区分表名的大小写的解决办法

问题描述: 今天将某项目数据库移植到liunix服务器上,结果出现无法找到表的错误,查询数据库,表确实是存在的.经过分析比较,发现是表名大小写问题导致. 问题分析: MySQL数据库的表名在Linux系统下是严格区分大小写的,在Windows系统下开发的程序移植到Linux系统下,如果程序中SQL语句没有严格按照大小写访问数据库表,就可能会出现找不到表的错误. 解决办法: 修改MySQL的配置文件my.cnf,在[mysqld]部分添加如下配置选项lower_case_table_names =

linux系统下优盘挂载之文件系统后只读解决方法

问题:有时在linux系统下挂载优盘之后,优盘文件系统只读,表现形式一般为:删除文件或者创建文件的时候提示无法删除或创建文件:文件系统只读; 解决方法: 1. 在Linux系统中运行如下命令 tail -f /var/log/syslog    2. 插入有只读文件系统故障的U盘    3. 观察命令行输出Jul 8 16:44:50 cslouis-pc kernel: [15595.155904] FAT: Filesystem error (dev sdb1)Jul 8 16:44:50

在虚拟机的Linux系统下安装wineqq

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 本文参考教程:http://www.ubuntukylin.com/ukylin/forum.php?mod=viewthread&tid=7688&extra=page%3D1 WineQQ下载地址:http://pan.baidu.com/s/1c2FSTsk qq是一款国内非常著名的聊天工具,但是在腾讯的官网并没有Linux操作系统下的qq安装版本,但是我们也有办法在Linux系统下安装qq,下面我们实现在Linux安装w

linux系统下运行java项目的脚本编写

本文主要讲linux系统下运行jar包,至于如何打包jar包,放到linux系统下可以参考其他的博客. 在linux系统下运行jar包的命令如下: 1.java -jar xxxxx.jar  // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2.java -jar xxxxx.jar &   //当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 3.nohup Java -jar xxxxxx.jar &  //意思是不挂断运行命令,当账户退