• 控制台程序如何让用户输入密码 关闭回显


    初级代码游戏的专栏介绍与文章目录-CSDN博客

            控制台程序输入密码涉及到关闭回显,只要关闭了回显,别的就是常规操作了。输入的密码要不要显式成星号或者别的,纯属个人喜好。

            主要用到下面几个知识:

    • tcgetattr 获取终端属性
    • tcsetattr 设置终端属性
    • ECHO 终端属性的回显
    • STDIN_FILENO 代表标准输入的文件描述符

            输完密码还要把回显打开,所以最好包装起来,这是打开或关闭回显的代码:

    1. bool setEcho(int fd,bool option)
    2. {
    3. int err;
    4. struct termios term;
    5. if(tcgetattr(fd,&term)==-1)
    6. {
    7. thelog<<"获得终端属性失败"<
    8. return false;
    9. }
    10. if(option)
    11. {
    12. term.c_lflag|=ECHO;
    13. }
    14. else
    15. {
    16. term.c_lflag &=~ECHO;
    17. }
    18. err=tcsetattr(fd,TCSAFLUSH,&term);
    19. if(err==-1 && err==EINTR)
    20. {
    21. thelog<<"设置终端属性失败"<
    22. return false;
    23. }
    24. return true;
    25. }

            输入密码的代码,参数控制是否需要输入两次(一般用于设置密码):

    1. string inputPassword(bool repeat)
    2. {
    3. string ret;
    4. char buf[256];
    5. //关回显
    6. setEcho(STDIN_FILENO,false);
    7. while(true)
    8. {
    9. cout<<"Please input password >"<
    10. cin.getline(buf,256);
    11. buf[255]='\0';
    12. ret=buf;
    13. if(repeat)
    14. {
    15. cout<<"Please repeat password >"<
    16. cin.getline(buf,256);
    17. buf[255]='\0';
    18. if(ret==buf)break;
    19. else cout<<"two inputs are diffrent"<
    20. }
    21. else break;
    22. }
    23. //开回显
    24. setEcho(STDIN_FILENO,true);
    25. return ret;
    26. }

            代码很简单。

            以上代码是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