【发布时间】:2013-07-24 04:25:37
【问题描述】:
Linux 是否缓冲 keys 在终端中键入,以便您以后可以一次读取一个键?
我问是因为我想捕捉 ESC 和箭头键按下,但找不到可靠读取代码的方法。我将终端置于非规范模式,如果没有输入,希望程序阻塞,但如果有,我只想获取一个按键进行处理。
更新 2:箭头键只是一个示例。即使对于我的程序具有未知转义序列的键,我也需要识别按键。
有两种相互冲突的情况:
read(1) 返回一个字符。对于功能键和 ESC 键,此字符均为 0x1b。要检查它是否是箭头键,您需要读取(1),如果只按单个 ESC,它将阻塞。
解决方案:阻塞读取(1),非阻塞读取( 1)
问题:如果第二次读取没有匹配任何功能键,这可能意味着它是缓冲的 ESC 后跟一些序列,或未知的功能键。如何检测未知功能按键?read(4) 最多返回 4 个字符,但是如果你按 ESC 四次让它缓冲,你会得到一个 4 个 0x1b 的字符串。同上查找是否有未知功能键的问题。
任何人都可以解释如何在 Linux 终端中处理这些问题,或者至少发布一个证明 Linux 只是没有键输入缓冲区的证据吗?
【问题讨论】:
标签: linux unix terminal keypress termios