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