控制台程序输入密码涉及到关闭回显,只要关闭了回显,别的就是常规操作了。输入的密码要不要显式成星号或者别的,纯属个人喜好。
主要用到下面几个知识:
输完密码还要把回显打开,所以最好包装起来,这是打开或关闭回显的代码:
- 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的。
(这里是结束)
-
相关阅读:
【QT+QGIS跨平台编译】之五十三:【QGIS_CORE跨平台编译】—【qgssqlstatementparser.cpp生成】
鸿蒙系列-如何使用好 ArkUI 的 @Reusable?
window 安装多个版本的nodejs值版本控制工具nvm
SpringMVC源码解析-doDispatch方法
分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测
Android Qcom Sensor架构学习
Linux关闭终端保留程序
基于php的宠物领养系统
同源策略和跨域问题
C++入门基础
-
原文地址:https://blog.csdn.net/2301_77171572/article/details/134069207