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

时间:2015-12-11 10:04:07

标签: c++ linux stdout

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

例如:app 1启动app 2,将N行写入其stdin然后读取其stdout。第二个应用程序只是重写从stdinstdout的全部内容。目前app 1完成N行写入app 2并切换为阅读stdoutapp 2已完成打印到stdout的行}。这个数据在stdout的缓冲区中。随着N的增加,我们可以溢出缓冲区。

那会怎么样? app 2会崩溃或进程阻塞吗?如果是崩溃什么是错误代码(linux)?

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

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

1 个答案:

答案 0 :(得分:4)

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