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