c - C中使用系统调用读取键盘事件

标签 c keyboard

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

对于执行此操作的最简单方法,我有点不知所措。

我想做的是打开文件(键盘事件 4),并使用类似 fgets 的东西在无限 while 循环中逐个字符地读取它,然后使用 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;
}

最佳答案

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

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

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

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

'希望对您有所帮助!

关于c - C中使用系统调用读取键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665804/

相关文章:

c - 我怎样才能减少运行时间?

c - 任何优化都会删除代码(指向数组的 volatile 指针)

c++ - C/ObjC - 参数大小。使用指针与值

c# - 在任何应用程序中模拟击键

c - Notepad++ 和 NppExe 没有显示输出

c - ";" block 中的 "if"是什么意思?

java - java中的类分离。例如。虚拟键盘(带有 activelisteners)和另一个从键盘类接收输入的类

swift - UITextView 键盘需要点击 2 次才能打开。

android自定义键盘: touch area of space key not completely covered

ios - Swift,在键盘后面移动内容不会在关闭后重置