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) == -) {
fprintf(stderr, "Can\'t get the attribution of the terminal!\n");
exit();
} if (option) {
term.c_lflag |= ECHOFLAGS;
}
else {
term.c_lflag &= ~ECHOFLAGS;
} err = tcsetattr(fd, TCSAFLUSH, &term); if (err == - && err == EINTR) {
fprintf(stderr, "Can\'t set the attribution of the terminal!\n");
exit();
} return ;
} int get_passwd(char* passwd, int size) {
int c;
int n = ; fprintf(stderr, "Please input password:"); do {
c = getchar();
if (c != '\n' && c != '\r') {
passwd[n++] = c;
}
} while (c != '\n' && c != '\r' && n < (size-)); 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) == ) &&
(strncmp(passwd, USER_PASS, plen) == );
} int main(void) {
char name[MAX];
char passwd[MAX]; LOGIN:
fprintf(stderr, "login user:");
fgets(name, MAX, stdin);
name[strlen(name)-] = '\0'; set_disp_mode(STDIN_FILENO, ); 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, );
goto LOGIN;
} set_disp_mode(STDIN_FILENO, ); return ;
}
Linux终端下简单的登录程序 密码不回显的更多相关文章
- linux终端下 编译c语言程序
linux终端下,编译C语言程序步骤为: 采用vi进行源代码编写,编写完成后,:wq存盘退出,如: vi test.c 在命令行下,运行gcc编译程序,生成执行码,如: gcc -o test te ...
- 如何记录linux终端下的操作日志
如何记录linux终端下的操作日志 在linux终端下,为方便检查操作中可能出现的错误,以及避免屏幕滚屏的限制,我们可以把操作日志记录下来.常用的工具有 screen,script,以及tee等,通过 ...
- linux终端下一些“风骚”的按键操作及Linux终端命令
linux终端下一些"风骚"的按键操作 <backspace> 删除 <ctrl-l> 清空屏幕, 相当于clear tab ...
- Linux终端下安装jdk
linux 终端下安装jdk(rpm方法) 1.下载jdk对应版本rpm文件(以下称为jdk.rpm) 放在对应文件夹下 2.使用命令给定权限 #chmod +x jdk.rpm 3.解压rpm文件 ...
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- Linux 终端下的颜色
Linux 终端下颜色的输出 在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如 echo -e "\033[41;36m 红底绿字\033[0m" 其中41的位 ...
- Linux shell 下简单的进度条实现
Linux shell 下简单的进度条实现 [root@db145 ~]# cat print_process.sh function Proceess(){ spa='' i= ] do print ...
- 经验收获Linux终端下方便命令
一.命令行日常系快捷键 如下的快捷方式非常有用,能够极大的提升你的工作效率: CTRL + U - 剪切光标前的内容 CTRL + K - 剪切光标至行末的内容 CTRL + Y - 粘贴 CTRL ...
- [转]Linux/Windows下脚本对拍程序
[新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...
随机推荐
- JavaScript基础3——使用Button提交表单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Rsync+sersync部署
内核版本:2.6.32-431.el6.x86_64 系统采用最小化安装,系统经过了基本优化,selinux 为关闭状态,iptables 为无限制模式 源码包存放位置:/root Rsync 客户端 ...
- tmux 操作简版
操作session: 操作window: 操作pane: 原文
- java并发学习--第四章 JDK提供的线程原子性操作工具类
在了解JDK提供的线程原子性操作工具类之前,我们应该先知道什么是原子性:在多线程并发的条件下,对于变量的操作是线程安全的,不会受到其他线程的干扰.接下来我们就学习JDK中线程的原子性操作. 一.CAS ...
- springboot操作rabbitmq
////DirectExchange directExchange = new DirectExchange("test.direct");////amqpAdmin.declar ...
- java源码生成可运行jar
参考资料:https://blog.csdn.net/whatday/article/details/54767187 源码目录层级如下:
- 在一个div上增加遮罩
有一个需求是给一个视频增加遮罩 我研究了下 抽象出来就是给一个div增加遮罩 原理是:最外层的div使用relative定位 然后里面放两个子div 一个是不被遮的 另一个是遮罩(用abs ...
- Feign调用远程服务报错:Caused by: java.lang.IllegalStateException: Method getMemberInfo not annotated with HTTP method type (ex. GET, POST)
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ord ...
- 第三代DRDS分布式SQL引擎全新发布
DRDS (阿里云分布式关系型数据库服务,https://www.aliyun.com/product/drds)于 4 月 30 号发布了 5.3 版本,这是一个年度大更新.主要带来了以下特性: 性 ...
- 3,LinkedList
一,LinkedList简介 1,LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. 2,LinkedList 实现 ...