只是试图寻求理解。我正在编写一个小程序,它将从键盘读取击键事件,并触发某些事件(使用 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) 但是,我鼓励您利用更高级别的库,例如 ncurses或 SDL .
'希望对您有所帮助!
关于c - C中使用系统调用读取键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21665804/