c++: Linux:管道到我的程序从多个线程或流,而不是' cout '

C++: Linux: Pipe to my program from multiple threads or streams other than `cout`

本文关键字:cout 线程 管道 Linux 我的 程序 c++      更新时间:2023-10-16

从这个问题开始,我注意到当调用这样的管道时,我的LogRotator程序没有捕获两种类型的输出:

$ ./MyMainProgram | ./LogRotator

当我的LogRotator C++程序不捕获输出信息的情况是:

1-当来自MyMainProgram时,我使用std::cout以外的流。例如:std::clog .

2-当MyMainProgram使用多线程时。在MyMainProgram中,我使用boost::thread_group,并且std::cout在新线程中的所有内容都不会被LogRotator捕获。

当这样的调用发生时,这种行为在linux中是正常的:

./MyMainProgram > log.txt
但是这可以通过调用 来解决
./MyMainProgram > log.txt 2> stderr_log.txt

我如何用同样的方法解决这个问题,使我的LogRotator捕获所有内容?

这将在管道到LogRotator之前将STDERR合并为STDOUT:

./MyMainProgram 2>&1 | ./LogRotator