LINUX:用C语言来模拟密码输入
2012-12-29 15:13
337 查看
以前在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,否则返回-1
int 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;
}
那我就自己实现一个类似的功能吧(功能相同,原理不同)
程序的思路很简单:关闭回显,读取输入,恢复设置。
上代码:
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <string.h>
#define MAXLEN 256
//参数dest是目标字符串, maxlen是最大长度,
//如果输入超过了最大长度,则密码将会被截断
//成功返回0,否则返回-1
int 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;
}
相关文章推荐
- 50 C语言模拟密码输入(显示星号)
- C语言 模拟三次密码输入
- Linux下C语言多线程编程实例(用C语言模拟word软件,一边输入,一边统计字符)
- C语言控制台下实现模拟密码的输入
- Linux下C语言实现 密码不回显输入
- linux c语言 模拟键盘输入
- 【C语言】模拟用户登录情景(只能输入三次密码)
- 【C语言】模拟三次密码输入
- C语言 模拟三次密码输入
- c语言:模拟实现一个输入密码自动取款的程序
- c语言:模拟三次密码输入。
- C语言 模拟三次密码输入
- [置顶] 【C语言】模拟三次密码输入
- Linux 环境下C语言下实现密码输入无回显
- c语言:模拟三次密码输入。
- c语言:模拟实现一个输入密码自动取款的程序
- C语言模拟密码输入(显示星号)
- 模仿Linux密码输入(C语言编写)
- linux下 scp命令不需要输入用户密码
- linux下输入密码不回显