Linux 中的键盘频率

Keyboard frequency in Linux

我正在尝试在非阻塞模式下使用 read 从键盘事件设备 (/dev/input/event5) 读取数据。 read returns -1 如果没有可读的内容。问题是我应该多久检查一次事件设备以获取新输入(在下一次读取尝试之前程序应该休眠多长时间)?如果我按下按钮但不释放驱动程序将此事件发送到事件设备的频率如何?

更新: 我的程序通过网络发送从事件设备读取的键码(我编写低级 KVM)。所以在这种情况下我有套接字超时并且想知道这个超时的适当值。我希望实时发送的键码没有延迟。

一般来说,当你想从非阻塞文件描述符中读取时,最好使用像 select(2)poll(2) 这样的函数等待它(或使用 epoll 函数族)。这些函数可以让您休眠一定时间(或永远),并在有新输入要处理时被唤醒。

驱动程序可能会在读取每个扫描码时将数据发送到设备文件,或者它可能会根据自己的选择对相关请求进行批处理,因此您不应依赖特定的超时。相反,指定一个适当的超时 select(2)poll(2) 取决于你想等待多长时间,如果没有进来。如果有东西进来,你会被更早地唤醒,然后 read(2) 应该成功(尽管你应该做好被虚假唤醒的准备;也就是说,当没有什么可读的时候)。

如果您不知道使用哪个函数并且不使用大量文件描述符,select 可能是最简单的选择。手册页提供了如何使用它的示例。