这似乎是一个简单的问题,但我真的很难找到答案。我正在用 C 编写一个程序,在某些系统上这似乎是可能的(尽管是远程的),因为在某些情况下,标准输入的缓冲区似乎只有 4k。
所以,我的问题是,操作系统是否有处理 stdin 填满的标准方法(即事实上的标准、posix 要求等)?如果实际上有某种标准的方法来处理这种情况,那么结果的可预测性如何?
最佳答案
操作系统将有一个缓冲区来存储未读的标准输入输入。一般来说,写入 stdin 的事情将使用阻塞调用,因此如果缓冲区已满,它们将简单地停止直到有可用空间,因此不会丢失数据。如果这是不受欢迎的行为(您不想阻止编写器),那么您需要确保及时读取缓冲区,以免它填满。
你可以做的一件事是创建一个工作线程,它只是简单地坐在一个紧密的循环中,尽可能快地读取标准输入,并将数据放在其他地方(例如,在一个更大的缓冲区中),然后主程序访问来自新缓冲区的数据,而不是从标准输入本身读取。
关于c - 如果 stdin 满了会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33007489/