gpt4 book ai didi

c - 如何从终端“按键缓冲区”读取?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:50 29 4
gpt4 key购买 nike

假设ping命令正在运行,当ping仍在运行时,我在终端上键入一些内容。
现在,当ping终止并获得返回控制时,bash将在终端上打印我在bash运行时键入的内容。这张截图显示了我的意思:
enter image description here
如何获得这些信息?我确信它不是从ping获得的,因为当我键入bash时,我没有按enter键(因此stdin是空的)。
因此,这些数据必须存储在“击键缓冲区”中,并从该缓冲区中读取。
我的问题是,"I typed this while ping was running"如何从这个缓冲区读取数据(它调用什么函数…)

最佳答案

这是一个关于readline library的东西(这里有一个more approachable page关于它)。
您可以通过python看到这一点,python是在大多数发行版上使用readline支持编译的:

>>> import time
>>> time.sleep(5)
I am typing this during the sleep>>> I am typing this during the sleep

不过,我也碰巧有一个没有readline支持:
>>> import time
>>> time.sleep(5)
I am typing this during the sleep>>>

(这也可以通过 cat | python -i实现,因为 cat不使用readline,而python禁用readline,因为它的输入不是终端。)
我的猜测是:
readline禁用缓冲(可能类似于 this)。这样,它可以接收输入的所有字符。
readline禁止将字符回送到终端,并接管控制权。( Here是一种可能的方式。)
bash禁用readline,这样 echo就可以完成它的工作。
echo忽略这些字符,因此它们在键入后仍在 stdin中。
readline有助于收回控制权,禁用缓冲/回显键入的字符(但对于已经键入的字符来说太晚了),并处理 stdin中的字符。
tl;dr:它们会自动被回显一次,然后再被readline库回显一次。

关于c - 如何从终端“按键缓冲区”读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com