如果 STDOUT 缓冲区溢出会发生什么

What happens if STDOUT buffer is overflowed

我想知道如果 stdout 缓冲区溢出会怎样?

例如:app 1 启动 app 2,将 N 行写入其 stdin,然后 THEN 读取其 stdout。第二个应用只是重写了它从 stdinstdout 的所有内容。目前 app 1 完成将 N 行写入 app 2 并切换到读取其 stdout app 2 已经完成将行打印到 stdout.并且此数据位于其标准输出的缓冲区中。随着 N 的增加,我们可以溢出缓冲区。

然后会发生什么? app 2 会崩溃还是它的进程会阻塞?如果是崩溃,错误代码是什么 (linux)?

编辑:一些代码http://pastebin.com/msMRdxGR
我收到 SIGPIPE 错误。 (并且使用了错误的标签——app1 是 app2,反之亦然)。

抱歉没有从头问起,有没有办法避免这个错误?如果 app2 使用 2 个线程 - 一个用于读取,另一个用于写入。并在堆内部动态分配缓冲区以在它们之间交换数据。然后,如果没有人读取我的标准输出,我就可以暂停写入线程和读取线程。但是如何检测到stdout buf即将溢出?

如果 OS 设备缓冲区已满,进程将阻塞。