【发布时间】:2021-01-17 20:35:20
【问题描述】:
假设我有一个具有以下循环的 C 程序。
while ((c = getchar()) != EOF) {
...
}
这个循环看起来好像是一个一个地读取在 tty 上键入的字符。但是一旦输入了字符,我就不应该改变它们,显然,这不会发生。
这一定意味着 tty 必须保留一些缓冲区以保留它已接收但尚未推送到标准输入的值。一旦进入标准输入,字符就会被一一读取。
这是正确的吗?如果是这样,我怎样才能获得这个缓冲区中的字符,而不必去标准输入?我尝试将 ioctl 与 FIONREAD 一起使用,但它似乎不起作用(缓冲区的大小始终为零,即使终端中有字符),并且由于此数据不在标准输入中,这意味着从标准输入读取的方法行不通(这些是作为类似问题的答案给出的)
【问题讨论】:
-
This question 可能会为您提供一些有用的信息。请注意,当您使用 tty 时,程序的标准输入是由 tty 写入并由程序读取的虚拟文件。如果 tty 没有将某些内容刷新到该虚拟文件,则您的代码无法读取它。
-
所以在这种情况下,我的程序在读取(处理信号)期间被中断,我想获取该数据(打印它)。我应该将“已接收但尚未读取”的数据刷新到文件中并开始读取它。对吗?