Linux 不回显输入代码

int new_getpass(char* dest, int ml)
{
struct termios oldflag, newflag; //保存原有终端属性和新设置的终端属性
int len;

tcgetattr(fileno(stdin), &oldflag); //获得终端原有属性并保存在结构体oldflag

//设置新的终端属性,让输入时终端不会显

newflag = oldflag;
newflag.c_lflag &= ~ECHO;
newflag.c_lflag |= ECHONL;

//不等待数据结束立即改原变终端属性为新的终端属性

if(tcsetattr(fileno(stdin), TCSANOW, &newflag) != 0)
{
perror("tcsetattr");
return -1;
}

fgets(dest, ml, stdin); //从标准输入读取数据保存到dest,长度为ml
len = strlen(dest);
if(len > ml - 1)
{
len =ml -1;
}
dest[len-1] = 0;

//让终端恢复为原有的属性

if(tcsetattr(fileno(stdin), TCSANOW, &oldflag) != 0)
{
perror("tcsetattr");
return -1;
}

return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值