如何使用 Linux 系统调用检测何时按下某个键
Posted
技术标签:
【中文标题】如何使用 Linux 系统调用检测何时按下某个键【英文标题】:How to detect when a key is press using Linux system calls 【发布时间】:2018-03-09 09:26:12 【问题描述】:我正在尝试编写一个 C 程序,它使用 Linux 系统调用来模拟 Linux 终端中 more
命令的行为。由于用户可能会输入诸如q
之类的命令来完成执行,因此我试图找到一种不使用read(...)
从标准输入输出读取击键的方法,因为我不希望按下的键出现在标准输出。
换句话说,我希望能够在不写入的情况下检测按下的键。
我读过ioctl()
和termios
结构可以以某种方式用于此目的,但我不确定它们是如何使用的(我发现手册页有些神秘)。
我已经找到了一些使用这些函数的答案,但它们似乎都太复杂了。必须有一种更简单的方法来检测简单的击键,不是吗?
【问题讨论】:
您可能只使用ncurses
。或者查看more
(或less
)的源代码,看看它们是如何处理用户输入的?
【参考方案1】:
man 3 termios
,tcsetattr
,在标准输入上禁用ECHO
。
更多解释见:Hide password input on terminal
或者,您可以通过下面的 termios 抽象,使用输入层 /dev/input/*
,但我认为您需要禁用从输入设备到上层的转发事件。
【讨论】:
以上是关于如何使用 Linux 系统调用检测何时按下某个键的主要内容,如果未能解决你的问题,请参考以下文章