您的位置:首页 > 运维架构 > Linux

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

2011-09-12 07:01 162 查看
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,搞定了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: