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