控制台程序输入密码涉及到关闭回显,只要关闭了回显,别的就是常规操作了。输入的密码要不要显式成星号或者别的,纯属个人喜好。
主要用到下面几个知识:
输完密码还要把回显打开,所以最好包装起来,这是打开或关闭回显的代码:
- 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的。
(这里是结束)
-
相关阅读:
普瑞PS8742 Switch V0.9
助力AR眼镜轻量化,国内攻破二维扩瞳几何光波导量产
申请uniapp离线打包时的AppKey
类型体系与基本数据类型(第四节)
【无标题】
mysql与msql2数据驱动
Java 中的设计模式
FIFO控制器设计——日常学习
8、docker 安装 nginx
rabbit使用动态队列
-
原文地址:https://blog.csdn.net/2301_77171572/article/details/134069207
-
最新文章
-
C++11 线程同步接口std::condition_variable和std::future的简单使用
Go runtime 调度器精讲(十一):总览全局
Spring框架漏洞总结
Angular 18+ 高级教程 – 国际化 Internationalization i18n
基于Tauri2+Vue3搭建桌面端程序|tauri2+vite5多窗口|消息提醒|托盘闪烁
ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析
全球蓝屏后,微软决定将安全踢出Windows内核
Java读取寄存器数据的方法