如果stdin填满了怎么办?

时间:2015-10-08 05:42:22

标签: c operating-system buffer stdin buffer-overflow

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

所以,我的问题是,是否存在操作系统处理stdin填充的标准方式(即事实上的标准,posix要求等)?如果事实上有某种标准方式来处理这种情况,结果是多么可预测?

1 个答案:

答案 0 :(得分:3)

操作系统将有一个存储未读标准输入的缓冲区。一般情况下,写入stdin的事情将使用阻塞调用,这样如果缓冲区填满,它们将暂停,直到空间可用,因此不会丢失任何数据。如果这是不受欢迎的行为(您不想阻止编写器),那么您需要确保及时读取缓冲区以使其不会填满。

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