通过对termios结构的设置,读取键盘每一个字符
说明:
按 ‘q’ 退出程序
认为每个按键输出的字符不超过10个。 c:为字符输出, x:为16进制输出
请在字符界面 下运行。如在图形界面下, F1, F11键会被处理成快捷键。
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<termios.h>
int main()
{
struct termios initial_setting, new_setting;
char r[10];
int nread;
int i;
tcgetattr(fileno(stdin), &initial_setting);
new_setting = initial_setting;
new_setting.c_lflag &= ~ECHO;
new_setting.c_lflag &= ~ICANON;
new_setting.c_lflag &= ~ISIG;
new_setting.c_cc[VMIN] = 10;
new_setting.c_cc[VTIME] = 2;
if( (tcsetattr(fileno(stdin), TCSANOW,&new_setting)) != 0)
{
fprintf(stderr, "could not set attribute\n");
exit(1);
}
while(1)
{
nread = read(fileno(stdin), r, 10);
if(nread < 0)
exit(1);
if(nread == 0){
printf("\n");
fflush(stdout);
}
if(nread > 0){
for(i = 0; i<nread; i++){
printf("\t c:%c, x:%X", r[i], r[i]);
}
}
if(r[0] == 'q')
break;
printf("\n");
}
tcsetattr(fileno(stdin),TCSANOW,&initial_setting);
printf("\n");
return 0;
}
shift , ctrl, 等 不产生字符, 要监视前述键,参见evdev设备