控制台程序输入密码涉及到关闭回显,只要关闭了回显,别的就是常规操作了。输入的密码要不要显式成星号或者别的,纯属个人喜好。
主要用到下面几个知识:
输完密码还要把回显打开,所以最好包装起来,这是打开或关闭回显的代码:
- bool setEcho(int fd,bool option)
- {
- int err;
- struct termios term;
-
- if(tcgetattr(fd,&term)==-1)
- {
- thelog<<"获得终端属性失败"<
- return false;
- }
-
- if(option)
- {
- term.c_lflag|=ECHO;
- }
- else
- {
- term.c_lflag &=~ECHO;
- }
- err=tcsetattr(fd,TCSAFLUSH,&term);
- if(err==-1 && err==EINTR)
- {
- thelog<<"设置终端属性失败"<
- return false;
- }
-
- return true;
- }
输入密码的代码,参数控制是否需要输入两次(一般用于设置密码):
- string inputPassword(bool repeat)
- {
- string ret;
- char buf[256];
-
- //关回显
- setEcho(STDIN_FILENO,false);
-
- while(true)
- {
- cout<<"Please input password >"<
- cin.getline(buf,256);
- buf[255]='\0';
- ret=buf;
- if(repeat)
- {
- cout<<"Please repeat password >"<
- cin.getline(buf,256);
- buf[255]='\0';
- if(ret==buf)break;
- else cout<<"two inputs are diffrent"<
- }
- else break;
- }
-
- //开回显
- setEcho(STDIN_FILENO,true);
- return ret;
- }
代码很简单。
以上代码是Unix/Linux下运行的,用到了C++,但关键关键操作完全是C的。
(这里是结束)
-
相关阅读:
SpringMVC 学习(二)Hello SpringMVC
21 | 实用 Shell 脚本
剖析 SPI 在 Spring 中的应用
时间管理:我需要利用好自己的时间
SpringBoot、SpringCloud、SpringCloudAlibab对应版本选择
springBoot 源码一:自动配置底层源码分析
registry镜像仓库通过HTTP API删除镜像
系统性认知网络安全
LeetCode-1005-K次取反后最大化的数组和-贪心算法
在EF Core中为数据表按列加密存储
-
原文地址:https://blog.csdn.net/2301_77171572/article/details/134069207