【问题标题】:when is keyboard stream data stored in buffer?键盘流数据何时存储在缓冲区中?
【发布时间】:2021-12-30 09:52:40
【问题描述】:

我正在研究 C 中的标准 I/O 流和标准 I/O 函数。

我发现关于标准输入中的缓冲区有两个不兼容的解释。

  1. 每当为每个字符按下键时,这些数据都会立即存储在缓冲区中。当你按下回车键时,那些被传输到处理
  2. 只有在输入字符串并按下回车后,数据才会存储在缓冲区中。存储在缓冲区中的数据会在进程需要时获取。

你能告诉我上面解释的哪一点是正确的吗? 我真的很困惑。

【问题讨论】:

  • 缓冲区不止一个,所以两种说法都是正确的。
  • 我猜按回车后不一定。字符立即存储在缓冲区中(这是默认行为,但可能会更改)并且进程应该能够使用缓冲区中的数据。
  • 我的意思是标准输入流的缓冲区。我想知道那个缓冲区是如何工作的
  • 想象一下你按住一个键几秒钟......重复的“键”是如何生成/处理的?是键盘硬件电路吗?键盘本身是否有内部缓冲区?在键盘本身,在键盘连接到计算机的硬件级别,在操作系统连接到硬件的内核级别,在操作系统和应用程序之间的中间级别,可能有缓冲区,..., ...也许,很可能,以上所有

标签: c stream buffer


【解决方案1】:

终端或控制台程序有自己的缓冲区。操作系统有自己的缓冲区。而且您的程序有自己的缓冲区。

击键由终端或控制台程序存储,通常在按下 Enter 键之前不会发送到操作系统。

然后操作系统在内部存储数据,直到 C stdio 函数请求为止。

然后,C stdio 函数将从操作系统接收到的数据存储在进程内自己的内部缓冲区中。

最后,您的程序会从 stdio 缓冲区中读取数据。

【讨论】:

  • "The keystrokes are stored by the terminal or console program, and is usually not sent to the operating system until the Enter key is pressed." 40+y 前使用 VTxxx 终端时可能是的
猜你喜欢
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多