您的位置:首页 > 运维架构 > Linux

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("*");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: