红联Linux门户
Linux帮助

Linux终端特殊键ESC序列读取方法

发布时间:2014-12-12 21:53:28来源:linux网站作者:zishare

采用getchar获取终端输入,发现特殊键会有多个字符,以ESC开头,但字符数不固定。

如:向上键是27,91,65三个字符,F5:27,91,49,53,126是5个字符。

本来打算用取系统时间的方式来判断这些字符是不是一起的,但不同CPU、调度情况下,可能很不稳定,所以还是得用别的办法。


用普通的read试试看,先把终端设置成不等待读入时间,如下:

term.c_lflag &= ~ICANON; 
term.c_lflag &= (~ECHO); 
term.c_cc[VTIME] = 0; 
tcsetattr(STDIN_FILENO, TCSANOW, &term); 
for(;;) 

nRead=read(STDIN_FILENO, szCmdStr, 16); 
if (nRead != 0) 

for (tmp = 0; tmp < nRead; tmp ++) 

printf("Key %d index%d\r\n", szCmdStr[tmp], tmp); 
if (szCmdStr[tmp] == 'q') 
break; 

if (szCmdStr[tmp] == 'q') 
break; 

}
 

输出结果如下:

Key 10 index 0             《回车

Key 27 index 0             《向上键,3个字符

Key 91 index 1

Key 65 index 2

Key 27 index 0             《F12,5个字符

Key 91 index 1

Key 50 index 2

Key 52 index 3

Key 126 index 4

Key 27 index 0             《F5,5个字符

Key 91 index 1

Key 49 index 2

Key 53 index 3

Key 126 index 4

Key 113 index 0            《q


Yeah,搞定了!