linuxC下实现密文密码的输入函数
2015-07-03 15:14
501 查看
最近一直在写课程设计,在windows下可以很方便的实现密文密码的显示输入,但在linux环境下没有getch函数所以必须自己实现一个getch函数,解决了这个问题,接着就是密码的退格问题,每次按一个键就会输出一个'*',但是Backspace键也不列外,所以要将按键对应的acsii找出来,当按到对应键的时候进行退格显示,下面是我的输入密码函数:
#include<stdio.h>
#include<unistd.h>
#include<termios.h>
#include<assert.h>
#include<string.h>
int getch1(void) //自己实现的getch函数
{
struct termios tm,tm_old;
int fd = STDIN_FILENO, c,d;
if(tcgetattr(fd, &tm) < 0)
{
return -1;
}
tm_old = tm;
cfmakeraw(&tm);
if(tcsetattr(fd, TCSANOW, &tm) < 0)
{
return -1;
}
c = fgetc(stdin);
if(tcsetattr(fd, TCSANOW, &tm_old) < 0)
{
return -1;
}
return c;
}
int inputkey(char k[]) //密文密码输入函数,所传参数是要保存的字符串地址
{
int i;
for(i = 0; i < 10; i++)
{
__fpurge(stdin);
k[i] = getch1();
if((k[i] == 127) && (i == 0)) //当遇到backspace并且已经退格到最前面时不再退格
{
i--;
continue ;
}
if(k[i] == 13)
{
k[i]=0;
break ;
}
else if((k[i] == 127) && (i > 0)) //按下backspace键时,后退显示输出
{
printf("\b \b");
i-=2;
}
else if(k[i] == 3)
{
printf("\n");
exit(0);
}
else
{
printf("*");
}
}
}
#include<stdio.h>
#include<unistd.h>
#include<termios.h>
#include<assert.h>
#include<string.h>
int getch1(void) //自己实现的getch函数
{
struct termios tm,tm_old;
int fd = STDIN_FILENO, c,d;
if(tcgetattr(fd, &tm) < 0)
{
return -1;
}
tm_old = tm;
cfmakeraw(&tm);
if(tcsetattr(fd, TCSANOW, &tm) < 0)
{
return -1;
}
c = fgetc(stdin);
if(tcsetattr(fd, TCSANOW, &tm_old) < 0)
{
return -1;
}
return c;
}
int inputkey(char k[]) //密文密码输入函数,所传参数是要保存的字符串地址
{
int i;
for(i = 0; i < 10; i++)
{
__fpurge(stdin);
k[i] = getch1();
if((k[i] == 127) && (i == 0)) //当遇到backspace并且已经退格到最前面时不再退格
{
i--;
continue ;
}
if(k[i] == 13)
{
k[i]=0;
break ;
}
else if((k[i] == 127) && (i > 0)) //按下backspace键时,后退显示输出
{
printf("\b \b");
i-=2;
}
else if(k[i] == 3)
{
printf("\n");
exit(0);
}
else
{
printf("*");
}
}
}
相关文章推荐
- CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY解决方法
- linux 学习方法(转载)
- Unix/Linux中的fork函数
- linux下监控用户的操作记录
- linux下ip地址修改
- Linux
- linux(ubuntu14.04)+GPU+cuda6.5+caffe
- linux sort,uniq,cut,wc命令详解
- linux搭建java环境
- Linux系统调用--getitimer/setitimer函数详解
- 查看linux中某个端口(port)是否被占用(netstat,lsof)
- Linux开机启动(bootstrap)
- linux下多线程编程
- linux gz 解压缩
- linux grep命令详解
- centos 彻底卸载Mysql
- Linux设备驱动模型
- linux SD卡驱动分析
- Linux中查看CPU信息
- linux下mysql的远程连接