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

来源:互联网 发布:九世之仇 知乎 编辑:程序博客网 时间:2024/05/16 17:16

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;}


0 0
原创粉丝点击