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的字符数组存储输入的字符串,可以根据实际数据进行增加减少