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

我想知道如果stdout缓冲区溢出会发生什么?

例如: app 1启动app 2 ,将N行写入其stdin然后读取其stdout 。 第二个应用程序只是重写所有从stdinstdout 。 目前, app 1完成了N行到app 2写入,并切换到读取其stdoutapp 2已经完成将行stdoutstdout 。 而这个数据在它的stdout的缓冲区中。 随着N增加,我们可以溢出缓冲区。

那会发生什么? app 2崩溃或其进程块? 如果这是一个崩溃将是错误代码(Linux)?

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

对不起,从开始不问,但有没有办法避免这个错误? 如果app2使用2个线程 – 一个用于读取,另一个用于写入。 并在堆内部dynamic分配缓冲区来交换它们之间的数据。 然后,如果没有人读取我的stdout,我可以暂停从读线程写线程。 但是,我怎么能检测到标准输出buf将很快溢出?

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