【问题标题】:Using system calls in C to read keyboard events在 C 中使用系统调用来读取键盘事件
【发布时间】:2014-02-10 06:44:54
【问题描述】:

只是试图寻求理解。我正在编写一个小程序,它将从键盘读取击键事件,并触发某些事件(使用 switch 语句)。我正在做一些假设,并尝试将键盘视为要读取的 txt 文件。

我对最简单的方法感到不知所措。

我想要做什么打开文件(键盘事件 4),并使用 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;
}

【问题讨论】:

  • 为什么不用read(0, ...)来读取stdin

标签: c keyboard


【解决方案1】:

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

2) 听起来您使用的是 *nix 变体(例如 Linux 或 MacOS)。如果你想自己做所有的“垃圾”,这里有一个很棒的“howto”:

3) 您需要将键盘设备置于“原始”、“无缓冲”模式才能读取击键。除此之外......

4) 不过,我鼓励您利用更高级别的库,例如 ncursesSDL

'希望有帮助!

【讨论】:

  • 抱歉,我使用的是 ubuntu linux。我会通读那个howto。部分问题是我不确定找到信息。感谢您的链接。我假设垃圾摇滚是工作? :)
  • 这不是很多工作;)但是,是的,这就是我的意思。希望链接有所帮助。我还鼓励您查看可能使您的生活更轻松的库:例如 ncurses(例如,用于“文本模式菜单”)或 SDL(例如,用于游戏)。或更高级别的 GUI 工具包,如 GTK2 或 Qt。恕我直言...
  • 我会弄乱一下 ncurses 并阅读你给我看的文件。
  • TLDP 中还有 Ncurses HOWTO。 tldp.org/HOWTO/NCURSES-Programming-HOWTO 它提供了许多代码示例。顺便说一句,这些示例适用于其他诅咒实现以及 pdcurses。
  • 非常感谢各位的帮助。自从我接触任何代码以来已经 8 年了。我知道这些可能是非常基本的问题,但对我来说不是。
猜你喜欢
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2012-08-27
相关资源
最近更新 更多