这似乎是一个简单的问题,但我很难找到答案。我正在用C语言编写一个程序,在某些系统上这似乎是可能的(尽管远程如此),因为看起来有些情况下stdin的缓冲区只有4k。
所以,我的问题是,是否存在操作系统处理stdin填充的标准方式(即事实上的标准,posix要求等)?如果事实上有某种标准方式来处理这种情况,结果是多么可预测?
答案 0 :(得分:3)
操作系统将有一个存储未读标准输入的缓冲区。一般情况下,写入stdin的事情将使用阻塞调用,这样如果缓冲区填满,它们将暂停,直到空间可用,因此不会丢失任何数据。如果这是不受欢迎的行为(您不想阻止编写器),那么您需要确保及时读取缓冲区以使其不会填满。
你可以做的一件事是创建一个工作线程,它只是在一个紧密的循环中尽可能快地读取stdin并将数据放在其他地方(例如在一个更大的缓冲区中),然后主程序访问来自新缓冲区的数据,而不是从stdin本身读取数据。