如何捕获所有用户输入,一次读取一个字节?
我做了这个编码,但它不起作用
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中的条目之一.您可以通过/ dev / input / by-path中的连接类型(例如PS / 2,USB,…)找到键盘和其他输入设备.显然,您需要以root身份运行才能直接访问硬件,并且您需要提供自己从键盘输入的原始字节转换为按键和键释放等内容.这可能不是你想要的.
如果您正在运行GUI应用程序,则低级方法是在同一系列中调用XNextEvent
和其他功能.解码输入事件并不是完全无关紧要的,因为它取决于应用修饰符的应用程序. GUI框架(Motif,Gtk,Qt,…)可以帮助您.
如果您正在运行终端应用程序,请从标准输入或/ dev / tty读取(/ dev / tty始终是运行程序的终端,即使已重定向标准输入).你想把终端放在raw mode.你将获得解码的字符键,功能键主要作为转义序列.在这里,图书馆也有帮助;事实上的标准是ncurses.