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

What happens if STDOUT buffer is overflowed

本文关键字:什么 溢出 STDOUT 缓冲区 如果      更新时间:2023-10-16

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

例如:app 1启动app 2,将N行写入其stdinTHEN读取其stdout。第二个应用程序只是将它得到的所有内容从stdin重写到stdout。在app 1完成对app 2N行的写入并切换到读取其stdout的时刻,app 2已经完成了对stdout的行的打印。这些数据在其stdout的缓冲区中。随着N的增加,我们可能会溢出缓冲区。

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

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

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

如果操作系统设备缓冲区已满,进程将阻塞。