如何捕获所有的用户input,一次读取一个字节?
我做了这个编码,但它不工作
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);
我希望terminal等待input,但没有。
键盘设备本身是/dev/input
一个条目。 您可以在/dev/input/by-path
找到键盘和其他输入设备的连接类型(例如PS / 2,USB,…)。 显然,你需要以root身份运行才能直接访问硬件,并且需要从键盘的原始字节中提供自己的翻译,如按键和键释放。 这可能不是你想要的。
如果您正在运行GUI应用程序,则低级方法是在同一系列中调用XNextEvent
和其他函数。 对输入事件进行解码并不是很简单,因为应用程序需要使用修饰符。 一个GUI框架(Motif,Gtk,Qt,…)会帮助你。
如果正在运行终端应用程序,请从标准输入或从/dev/tty
读取(即使标准输入已被重定向, /dev/tty
始终是运行程序的终端)。 你会想把终端置于原始模式 。 你会得到解码字符键,功能键主要作为转义序列。 在这里,图书馆也是有帮助的。 事实上的标准是ncurses 。
你到底想做什么?
如果你正在寻找的是在终端无缓冲输入, tcsetattr()
是你在找什么 – 你需要把终端进入非规范模式,即设置终端标志不包含ICANON
– 见例如这个代码片段 。 请参阅man termios
(或函数名称,通常链接到Linux上的相同手册页)。
如果你想拥有对键盘的独占使用权,那就更加复杂了。