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

来源:互联网 发布:开源中国 cms 编辑:程序博客网 时间:2024/05/01 00:14

9月11日晚上,采用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,搞定了!

原创粉丝点击