2014-02-09 39 views
1

试图寻求理解。我正在编写一个小程序,它将从键盘读取按键事件,并触发某些事件(使用switch语句)。我正在做一些假设,并试图把键盘当作一个txt文件来读取。在C中使用系统调用来读取键盘事件

对于最简单的方法来说,我有点不知所措。

我想要做的事情是打开文件(键盘event4),然后使用类似fgets的东西在无限循环中逐个字符地读取它,然后使用switch语句打破循环并退出。

我被卡住的地方在于这些是系统调用,而我基本上不确定如何处理它们。

下面的代码绝对不会编译,只是把它放在那里作为我试图做的粗略演示。

#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 

int main(void) 
{ 
    // errors on opening 
    int fd = open("/dev/input/event4", O_RDONLY); 
    if(fd < 0) 
    { 
     printf("error while opening/n"); 
     return 1; 
    } 

    int keystroke = 0; 

    while (1) 
    { 
     keystroke = fgetsc(fd); 

     switch(keystroke) 
     { 
      case '1' : 
       break; 
      case '2' : 
       break; 
      case '3' : 
       break; 
      default: 
       printf("waiting for 1, 2, 3/n"); 
      } 

    close(fd); 
    return 0; 
} 
+0

为什么不使用'read(0,...)'来读取'stdin'? – Ilmirus

回答

1

1)阅读“原始键盘输入”通常取决于操作系统。例如,如果您使用Windows和Linux,则API和技术可能会有很大差异。

2)这听起来像你在* nix变种(例如Linux或MacOS)。如果你想要做的所有“垃圾”自己,这里是一个伟大的“HOWTO”:

3)你需要把键盘设备分为“原始”,“无缓冲“模式以读取按键。除其他外...

4)但是,我会鼓励您利用更高级别的库,如ncursesSDL

'希望有帮助!

+0

道歉,我使用Ubuntu的Linux。我会通读该howto。部分问题是我只是不确定要找到信息。感谢您的链接。我假设垃圾是工作? :) – user3287789

+0

这不是*那么多工作;)但是,这就是我的意思。希望链接帮助。我也鼓励你看看可能会让你的生活更轻松的库:比如ncurses(例如“文本模式菜单”)或SDL(例如游戏)。或者更高级别的GUI工具包,比如GTK2或Qt。恕我直言... – FoggyDay

+0

我会乱搞ncurses一点,并阅读你给我看的文件。 – user3287789