感谢支持
我们一直在努力

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

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


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


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


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



  1. term.c_lflag &= ~ICANON;  

  2.   

  3. term.c_lflag &= (~ECHO);  

  4.   

  5. term.c_cc[VTIME] = 0;  

  6.   

  7. tcsetattr(STDIN_FILENO, TCSANOW, &term);  

  8.   

  9. for(;;)  

  10.   

  11. {  

  12.   

  13.     nRead=read(STDIN_FILENO, szCmdStr, 16);  

  14.   

  15.     if (nRead != 0)  

  16.   

  17.     {  

  18.   

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

  20.   

  21.         {  

  22.   

  23.              printf(“Key %d index%d\r\n”, szCmdStr[tmp], tmp);  

  24.   

  25.              if (szCmdStr[tmp] == ‘q’)  

  26.   

  27.                  break;  

  28.   

  29.         }  

  30.   

  31.         if (szCmdStr[tmp] == ‘q’)  

  32.   

  33.              break;  

  34.   

  35.     }  

  36.   

  37. }  

输出结果如下:


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,搞定了!

赞(0) 打赏
转载请注明出处:服务器评测 » Linux终端特殊键ESC序列读取方法
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏