当前位置: 技术问答>linux和unix
linux下怎么在不按回车情况下就能读取字符&&读取到字符不回显
来源: 互联网 发布时间:2017-05-22
本文导语: RT,想要实现按up/down键显示历史命令,需要:1. 在不按回车键的情况下能够实时对up/down键按下做响应;2. 不回显出up/down键按下的显示; 怎么做呢? | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...
RT,想要实现按up/down键显示历史命令,需要:1. 在不按回车键的情况下能够实时对up/down键按下做响应;2. 不回显出up/down键按下的显示;
怎么做呢?
怎么做呢?
|
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
两种方法:
1. 调用system("stty -icanon");关闭缓冲区 system("stty -echo");关闭回显
不过,注意调用完退出程序之前要还原回来:system("stty icanon");打开缓冲区 system("stty echo");打开回显
不然的话,你的终端仍然会有关闭缓冲区和回显的效果,你会发现你输入的命令没有办法显示出来。。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2. 运用tcgetattr和tcsetattr来改变终端属性;(头文件为:#include )
定义struct termios termios_opt;
然后tcgetattr(outfd, &termios_opt);获取原先终端的属性存到 termios_opt里面;
再termios_opt.c_lflag &= ~ICANON;
termios_opt.c_lflag &= ~ECHO;
来设置你想要改变的参数;
最后,tcsetattr(outfd,TCSANOW,&termios_opt);把改变后的参数重新set到终端里面;
调用完退出程序之前还是要还原回来:
termios_opt.c_lflag |= ICANON;
termios_opt.c_lflag |= ECHO;
tcsetattr(outfd,TCSANOW,&termios_opt);
就可以了。
两种方法:
1. 调用system("stty -icanon");关闭缓冲区 system("stty -echo");关闭回显
不过,注意调用完退出程序之前要还原回来:system("stty icanon");打开缓冲区 system("stty echo");打开回显
不然的话,你的终端仍然会有关闭缓冲区和回显的效果,你会发现你输入的命令没有办法显示出来。。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2. 运用tcgetattr和tcsetattr来改变终端属性;(头文件为:#include )
定义struct termios termios_opt;
然后tcgetattr(outfd, &termios_opt);获取原先终端的属性存到 termios_opt里面;
再termios_opt.c_lflag &= ~ICANON;
termios_opt.c_lflag &= ~ECHO;
来设置你想要改变的参数;
最后,tcsetattr(outfd,TCSANOW,&termios_opt);把改变后的参数重新set到终端里面;
调用完退出程序之前还是要还原回来:
termios_opt.c_lflag |= ICANON;
termios_opt.c_lflag |= ECHO;
tcsetattr(outfd,TCSANOW,&termios_opt);
就可以了。