当前位置: 技术问答>linux和unix
如何不用回车就能完成输入
来源: 互联网 发布时间:2015-10-07
本文导语: 比如,linux下的more 命令,输入q后会直接退出,我想实现这一命令,可是必须输入q后敲回车键,如何省去这一步哪(我用的是getchar()) | 看看终端相关的一个结构吧.struct termios能解决你的问...
比如,linux下的more 命令,输入q后会直接退出,我想实现这一命令,可是必须输入q后敲回车键,如何省去这一步哪(我用的是getchar())
|
看看终端相关的一个结构吧.struct termios能解决你的问题,不过不是我几句话能说清的。
你在main函数开头加上下面的试试,头文件是#include :
FILE *input;
FILE *output;
struct termios initial_settings, new_settings;
if (!isatty(fileno(stdout))) {
fprintf(stderr,"You are not a terminal, OK.n");
}
input = fopen("/dev/tty", "r");
output = fopen("/dev/tty", "w");
if(!input || !output) {
fprintf(stderr, "Unable to open /dev/ttyn");
exit(1);
}
tcgetattr(fileno(input),&initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO; //不回显
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
new_settings.c_lflag &= ~ISIG;
if(tcsetattr(fileno(input), TCSANOW, &new_settings) != 0) {
fprintf(stderr,"could not set attributesn");
}
你在main函数开头加上下面的试试,头文件是#include :
FILE *input;
FILE *output;
struct termios initial_settings, new_settings;
if (!isatty(fileno(stdout))) {
fprintf(stderr,"You are not a terminal, OK.n");
}
input = fopen("/dev/tty", "r");
output = fopen("/dev/tty", "w");
if(!input || !output) {
fprintf(stderr, "Unable to open /dev/ttyn");
exit(1);
}
tcgetattr(fileno(input),&initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON;
new_settings.c_lflag &= ~ECHO; //不回显
new_settings.c_cc[VMIN] = 1;
new_settings.c_cc[VTIME] = 0;
new_settings.c_lflag &= ~ISIG;
if(tcsetattr(fileno(input), TCSANOW, &new_settings) != 0) {
fprintf(stderr,"could not set attributesn");
}