如果 stdin 满了会怎样?

What happens if stdin fills up?

这似乎是一个简单的问题,但我真的很难找到答案。我正在用 C 编写一个程序,在某些系统上这似乎是可能的(尽管是远程的),因为在某些情况下,标准输入的缓冲区似乎只有 4k。

所以,我的问题是,是否有 OS 处理 stdin 填充的标准方法(即事实上的标准、posix 要求等)?如果实际上有某种标准的方法来处理这种情况,那么结果的可预测性如何?

OS 将有一个缓冲区来存储未读的标准输入。一般来说,写入 stdin 的事情将使用阻塞调用,因此如果缓冲区已满,它们将简单地停止直到有可用空间,因此不会丢失数据。如果这是不受欢迎的行为(您不想阻止编写器),那么您需要确保及时读取缓冲区,以免它填满。

你可以做的一件事是创建一个工作线程,它只是简单地坐在一个紧密的循环中,尽可能快地读取标准输入,并将数据放在其他地方(例如,在一个更大的缓冲区中),然后是主程序从您的新缓冲区访问数据,而不是从标准输入本身读取数据。