首页 > 代码库 > Linux终端下简单的登录程序 密码不回显
Linux终端下简单的登录程序 密码不回显
在Linux进行登录是输入密码不会被回显,所以我也写了个简单的登入程序,使得在输入密码时不再进行回显。
#include <stdio.h>#include <stdlib.h>#include <termios.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <stdbool.h>#define USER_NAME "username"#define USER_PASS "userpass"#define MAX 20#define ECHOFLAGS (ECHO | ECHOE | ECHOK)int set_disp_mode(int fd, int option) { int err; struct termios term; if (tcgetattr(fd, &term) == -1) { fprintf(stderr, "Can\‘t get the attribution of the terminal!\n"); exit(1); } if (option) { term.c_lflag |= ECHOFLAGS; } else { term.c_lflag &= ~ECHOFLAGS; } err = tcsetattr(fd, TCSAFLUSH, &term); if (err == -1 && err == EINTR) { fprintf(stderr, "Can\‘t set the attribution of the terminal!\n"); exit(1); } return 0;}int get_passwd(char* passwd, int size) { int c; int n = 0; fprintf(stderr, "Please input password:"); do { c = getchar(); if (c != ‘\n‘ && c != ‘\r‘) { passwd[n++] = c; } } while (c != ‘\n‘ && c != ‘\r‘ && n < (size-1)); passwd[n] = ‘\0‘; return n;}bool check_login(const char* name, const char* passwd) { int nlen = strlen(USER_NAME); int plen = strlen(USER_PASS); return (strncmp(name, USER_NAME, nlen) == 0) && (strncmp(passwd, USER_PASS, plen) == 0);}int main(void) { char name[MAX]; char passwd[MAX]; LOGIN: fprintf(stderr, "login user:"); fgets(name, MAX, stdin); name[strlen(name)-1] = ‘\0‘; set_disp_mode(STDIN_FILENO, 0); get_passwd(passwd, MAX); if (check_login(name, passwd)) { fprintf(stderr, "\nHello %s, Welcome!\n", name); } else { fprintf(stderr, "\n"); set_disp_mode(STDIN_FILENO, 1); goto LOGIN; } set_disp_mode(STDIN_FILENO, 1); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。