我想知道如果stdout缓冲区溢出会发生什么?
例如: app 1
启动app 2
,将N
行写入其stdin
, 然后读取其stdout
。 第二个应用程序只是重写所有从stdin
到stdout
。 目前, app 1
完成了N
行到app 2
写入,并切换到读取其stdout
, app 2
已经完成将行stdout
到stdout
。 而这个数据在它的stdout的缓冲区中。 随着N
增加,我们可以溢出缓冲区。
那会发生什么? app 2
崩溃或其进程块? 如果这是一个崩溃将是错误代码(Linux)?
编辑:一些代码http://pastebin.com/msMRdxGR
我得到SIGPIPE错误。 (并使用错误的标签 – app1是app2,反之亦然)。
对不起,从开始不问,但有没有办法避免这个错误? 如果app2使用2个线程 – 一个用于读取,另一个用于写入。 并在堆内部dynamic分配缓冲区来交换它们之间的数据。 然后,如果没有人读取我的stdout,我可以暂停从读线程写线程。 但是,我怎么能检测到标准输出buf将很快溢出?
如果OS设备缓冲区已满,该进程将被阻止。