c - 如果 stdin 满了会怎样?

标签 c operating-system buffer stdin buffer-overflow

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

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

最佳答案

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

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

关于c - 如果 stdin 满了会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33007489/

相关文章:

c++ - 将 0 打印到文件是否安全?

Java NIO - 内存映射文件

c - 用于交换字符串的输出相关查询

x86 - "interrupt hooking"是什么意思?

c - 使用信号量运行程序

node.js - 如何通过管道传输到作为缓冲区而不是文件的 Node.js 流?

c# - 可观察流是否可以按时间戳进行分区,类似于 Buffer 或 Window?

c - C 中的字符串排序

C printf 无符号字符数组

c 数组未使用但如果未声明,程序运行错误