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

Linux终端下输入密码显示星号

2014-08-22 22:07 1071 查看
Linux终端下输入密码显示星号
passwd.h

#ifndef _PASSWD_H
#define _PASSWD_H

#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

char getch()
{
int c = 0;
int res = 0;
struct termios org_opts, new_opts;
res = tcgetattr(STDIN_FILENO, &org_opts);
assert(res == 0);
memcpy(&new_opts, &org_opts, sizeof(new_opts));
new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
c = getchar();
res = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);
assert(res == 0);
return c;
}

void passwd()
{
FILE *fp;
char input[] = {0};
int j,n;
char passwd[]="123";

system("reset");
if((fp = fopen("passwd.txt","w")) == NULL)
{
printf("open passwd file error\n");
exit(0);
}
if(fwrite(passwd,sizeof(passwd),1,fp) != 1)
{
printf("write file error!\n");
exit(0);
}
fscanf(fp,"%s",passwd);
n = strlen(passwd);
printf("\n\n\n\n\n\t\t*********welcome to use my system********\n");
printf("\n\t\t\tPlease enter password:");

while(1 != j)
{
int i = 0;
fflush(stdin);
input[0] = getch();
while(input[i] != '\n' && i < n)
{
printf("*");
i++;
input[i] = getch();
}

if(strncmp(passwd,input,n) == 0)
{
printf("\n\t\t\t\tOK!\n");
j = 1;
}
else
{
printf("\n\t\t\tSorry,try again!\n");
printf("\t\t\t");
}
}
getch();
}

#endif

test.c
#include <stdio.h>
#include "passwd.h"

int main()
{
passwd();
return 0;
}

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