我想从键盘设备捕获所有用户输入,一次读取一个字节。我编写了以下代码,但它不起作用:
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);
我预计终端会等待输入,但它没有。
键盘设备本身是其中的条目之一/dev/input
。您可以通过连接类型(例如 PS/2、USB 等)在以下位置找到键盘和其他输入设备:/dev/input/by-path
。显然,您需要以 root 身份运行才能直接访问硬件,并且您需要提供自己的翻译,将来自键盘的原始字节转换为按键和按键释放等内容。这可能不是您想要的。
如果您正在运行 GUI 应用程序,则低级方法是调用XNextEvent http://www.x.org/releases/X11R7.7/doc/man/man3/XNextEvent.3.xhtml以及同一家族中的其他职能。解码输入事件并不完全是微不足道的,因为它取决于应用程序来应用修饰符。 GUI 框架(Motif、Gtk、Qt...)会对您有所帮助。
如果您正在运行终端应用程序,请从标准输入或从/dev/tty
(/dev/tty
始终是程序运行所在的终端,即使标准输入已被重定向)。你需要将终端放入raw mode https://en.wikipedia.org/wiki/POSIX_terminal_interface#Early_Unices:_Seventh_Edition_Unix。您将获得解码的字符键和功能键(主要作为转义序列)。在这方面,图书馆也能有所帮助;事实标准是ncurses http://en.wikipedia.org/wiki/Ncurses.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)