Unix中的键盘设备

Bun*_*nny 4 linux keyboard drivers device

如何捕获所有用户输入,一次读取一个字节?

我做了这个编码,但它不起作用

if ((fd = open("/dev/char", O_RDONLY) != 1) {
    tty = open("/dev/tty", O_RDONLY);
    tcsetattr(0, TCSANOW, &orig_info);
    read (fd, &buf, sizeof(char));
}
close(fd);
Run Code Online (Sandbox Code Playgroud)

我希望终端等待输入,但事实并非如此.

Gil*_*il' 10

键盘设备本身就是其中一个条目/dev/input.您可以通过其连接类型(例如PS/2,USB,...)来定位键盘和其他输入设备/dev/input/by-path.显然,您需要以root身份运行才能直接访问硬件,并且您需要提供自己从键盘输入的原始字节转换为按键和键释放等内容.这可能不是你想要的.

如果您正在运行GUI应用程序,则低级方法是调用XNextEvent同一系列中的其他函数.解码输入事件并不是完全无关紧要的,因为它取决于应用修饰符的应用程序.GUI框架(Motif,Gtk,Qt,...)可以帮助您.

如果您正在运行终端应用程序,请从标准输入或从/dev/tty(/dev/tty始终是运行程序的终端)读取,即使已重定向标准输入也是如此.您需要将终端设置为原始模式.您将获得解码后的字符键,功能键主要用作转义序列.在这里,图书馆也有帮助; 事实上的标准是ncurses.