关于Unix上读取键盘输入的问题(curses) Esc 和 PgUp返回的值相同,如何区别? 加为好友 发送私信 在线聊天 jiantiantian 该用户很懒,没有设置昵称 等级: 可用分等级:长工 总技术分:10 总技术分排名:222917 结帖率:100.00% 发表于:2009-01-05 10:23:47 楼主可以用下面的代码进行测试,我的机器是HP-UX zx6000 B.11.23。 Esc 和 PgUp都返回的是0x1b,怎么能区别开呢? #include <stdio.h> #include <curses.h> main() { int c; initscr(); crmode(); nonl(); raw(); noecho(); keypad(stdscr, 1); mvwprintw(stdscr, 0, 1, "Please Input Key:"); refresh(); c = getch(); mvwprintw(stdscr, 20, 1, "input key:0x%x", c); if(c == 0x107) { printw("delete/n"); } refresh(); endwin(); return 0; } cc curses.c -l curses 问题点数:20 回复次数:2 显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 jiantiantian 该用户很懒,没有设置昵称 等级: 可用分等级:短工 总技术分:10 总技术分排名:222917 发表于:2009-01-07 09:07:531楼 得分:0怎么没有人回答呢? 修改 删除 举报 引用 回复 加为好友 发送私信 在线聊天 jiantiantian 该用户很懒,没有设置昵称 等级: 可用分等级:短工 总技术分:10 总技术分排名:222917 发表于:2009-01-09 13:48:582楼 得分:0自己回答吧 使用curses库是没有办法区别的。 可是使用stty命令对终端进行设置,可以及时响应。 也可以对ESC键和PgUp等进行判断。 代码如下: #include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/fcntl.h> //sttyコマンドは標準出力で使用される端末の設定と確認を行うことができます。 //コマンドリファレンスはこちらを参考に。 //http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/stty.1.html int keyInput1(char ab_Chr[]) { int gi_Tty; /* 端末を入力モードでオープン */ if((gi_Tty = open("/dev/tty",O_RDONLY)) == -1)/* 異常時 */{ /* 異常で復帰 */ return -1; } system("stty raw -echo"); read(gi_Tty, ab_Chr, 5); close(gi_Tty); system("stty -raw echo"); return 0; } int main() { char t_ReadBuf[250]; char ab_Chr[250]; int c ; memset(ab_Chr, 0x00, sizeof(ab_Chr)); printf("+++++ Call keyInput1 +++++++/n"); printf("Please Input Key:/n"); keyInput1(ab_Chr); printf("/n input key:0x%x/n",ab_Chr[0]); for(int i=0; i < 5; i++) { printf("---input key ab_Chr[%d] :0x%x/n",i, ab_Chr[i]); } } $ ./a.out (esc的执行结果) +++++ Call keyInput1 +++++++ Please Input Key: input key:0x1b ---input key ab_Chr[0] :0x1b ---input key ab_Chr[1] :0x0 ---input key ab_Chr[2] :0x0 ---input key ab_Chr[3] :0x0 ---input key ab_Chr[4] :0x0 $ ./a.out (PgUP的执行结果) +++++ Call keyInput1 +++++++ Please Input Key: input key:0x1b ---input key ab_Chr[0] :0x1b ---input key ab_Chr[1] :0x5b ---input key ab_Chr[2] :0x33 ---input key ab_Chr[3] :0x7e ---input key ab_Chr[4] :0x0 但是不能与curses进行配合使用。