LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1822|回复: 3

linux 下的 kbhit功能示例。

[复制链接]
发表于 2005-12-20 13:58:07 | 显示全部楼层 |阅读模式
看书上的例子,抄下来给朋友当圣诞礼物了。;)
书名是《Beginning Linux Programming Third Edition》
246页左右的位置。

  1. #include <stdio.h>
  2. #include <termios.h>
  3. #include <term.h>
  4. #include <curses.h>
  5. #include <unistd.h>
  6. static struct termios initial_settings, new_settings;
  7. static int peek_character = -1;
  8. void init_keyboard();
  9. void close_keyboard();
  10. int kbhit();
  11. int readch();

  12. int main()
  13. {
  14.   int ch = 0;

  15.   init_keyboard();
  16.   while(ch != 'q'){
  17.     printf("looping\n");
  18.     sleep(1);
  19.     if(kbhit()){
  20.       ch = readch();
  21.       printf("you hit %c\n", ch);
  22.     }
  23.   }
  24.   close_keyboard();
  25.   exit(0);
  26. }

  27. void init_keyboard()
  28. {
  29.   tcgetattr(0, &initial_settings);
  30.   new_settings = inital_settings;
  31.   new_settings.c_lflag &= ~ICANON;
  32.   new_settings.c_lflag &= ~ECHO;
  33.   new_settings.c_lflag &= ~ISIG;
  34.   new_settings.c_cc[VMIN] = 1;
  35.   new_settings.c_cc[VTIMB] = 0;
  36.   tcsetattr(0, TCSANOW, &new_settings);
  37. }

  38. void close_keyboard()
  39. {
  40.   tcsetattr(0, TCSANOW, &initial_settings);
  41. }

  42. int kbhit()
  43. {
  44.   char ch;
  45.   int nread;

  46.   if(peek_character != -1)
  47.     return 1;
  48.   new_settings.c_cc[VMIN] = 0;
  49.   tcsetattr(0, TCSANOW, &new_settings);
  50.   nread = read(0, &ch, 1);
  51.   new_settings.c_cc[VMIN] = 1;
  52.   tcsetattr(0, TCSANOW, &new_settings);
  53.   if(nread == 1){
  54.     peek_character = ch;
  55.     return 1;
  56.   }
  57.   return 0;
  58. }

  59. int readch()
  60. {
  61.   char ch;

  62.   if(peek_character != -1){
  63.     ch = peek_character;
  64.     peek_character = -1;
  65.     return ch;
  66.   }
  67.   read(0, &ch, 1);
  68.   return ch;
  69. }
复制代码
发表于 2005-12-23 23:26:58 | 显示全部楼层
终端图形编程?????
楼主在翻译这本书马???
回复 支持 反对

使用道具 举报

发表于 2005-12-23 23:27:01 | 显示全部楼层

study

studystudy
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-24 02:16:59 | 显示全部楼层
我不是写书名了吗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表