ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux控制台,用户名输入及密码输入显示处理

2021-05-11 09:59:39  阅读:198  来源: 互联网

标签:term return string int pos Linux 控制台 输入


Linux控制台接收用户输入不进行显示回显,类似密码输入效果

提示:本文参考网络源码进行修改完善。

文章目录

一、C++代码可以去除字符串中的回车、空格、tab等字符

string& trim(string &str, string::size_type pos = 0)
{
    static const string delim = " \n\t"; //删除空格或者tab字符
    pos = str.find_first_of(delim, pos);
    if (pos == string::npos)
        return str;
    return trim(str.erase(pos, 1));
}

二、以下函数可以用来控制命令行输入显示状态及是否显示及回显等

#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)
int set_disp_mode(int fd,int option)
{
    int err;
    struct termios term;
    if(tcgetattr(fd,&term)==-1)
    {
        perror("Cannot get the attribution of the terminal");
        return 1;
    }
    if(option)
        term.c_lflag|=ECHOFLAGS;
    else
        term.c_lflag &=~ECHOFLAGS;
    err=tcsetattr(fd,TCSAFLUSH,&term);
    if(err==-1 && err==EINTR)
    {
        perror("Cannot set the attribution of the terminal");
        return 1;
    }
    return 0;
}

三、以下函数获取用户输入,可以控制显示方式,如用户名进行输入显示、密码等不进行显示

string getUserInput(bool bShow)
{
    set_disp_mode(STDIN_FILENO,bShow);
    char password[256];
    int c;
    int n = 0;

    do{
        c=getchar();
        if (c != '\n'|c!='\r'){
            password[n++] = c;
        }
    }while(c != '\n' && c !='\r' && n < (256 - 1));
    password[n] = '\0';
    set_disp_mode(STDIN_FILENO,1);
    string strReture=string(password);
    return trim(strReture);
}

提示:这里采用大小为256的字符数组存储输入的字符串,可以根据实际数据进行增加减少

标签:term,return,string,int,pos,Linux,控制台,输入
来源: https://blog.csdn.net/m0_50075609/article/details/116641228

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有