LINUX:用C语言来模拟密码输入

来源:互联网 发布:淘宝卖家后台 编辑:程序博客网 时间:2024/04/28 03:26
    以前在LINUX环境下,想输入密码(关闭回显)时都是用getpass函数,今天无意中看到手册上说:This function is obsolete.  Do not use it. 
    那我就自己实现一个类似的功能吧(功能相同,原理不同)

程序的思路很简单:关闭回显,读取输入,恢复设置。

上代码:

#include <stdio.h>#include <stdlib.h>#include <termios.h>#include <string.h>#define MAXLEN 256//参数dest是目标字符串, maxlen是最大长度,//如果输入超过了最大长度,则密码将会被截断//成功返回0,否则返回-1int new_getpass(char *dest, int maxlen){struct termios oldflags, newflags;int len;//设置终端为不回显模式 tcgetattr(fileno(stdin), &oldflags);newflags = oldflags;newflags.c_lflag &= ~ECHO;newflags.c_lflag |= ECHONL;if (tcsetattr(fileno(stdin), TCSANOW, &newflags) != 0){perror("tcsetattr");return -1;}//获取来自键盘的输入fgets(dest, maxlen, stdin);len = strlen(dest);if( len > maxlen-1 )len = maxlen - 1;dest[len-1] = 0;//恢复原来的终端设置if (tcsetattr(fileno(stdin), TCSANOW, &oldflags) != 0){perror("tcsetattr");return -1;}return 0;}int main(){char password[MAXLEN];printf("Enter password: ");new_getpass(password, MAXLEN);printf("You password is: %s\n", password);return 0;}


原创粉丝点击