如何使用 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 termiostcsetattr,在标准输入上禁用ECHO

更多解释见:Hide password input on terminal

或者,您可以通过下面的 termios 抽象,使用输入层 /dev/input/*,但我认为您需要禁用从输入设备到上层的转发事件。

【讨论】:

以上是关于如何使用 Linux 系统调用检测何时按下某个键的主要内容,如果未能解决你的问题,请参考以下文章

Android webview如何检测何时重新加载

检测何时按下自定义 UIButton

如何检测用户何时按下 iPhone 中的幻灯片关机按钮?

检测按下的键何时是第一个字符

如何检测按下的鼠标何时进入不同框架中的小部件

检测iPad的屏幕何时关闭或Unity中的Home按钮被按下事件?