c++中popen()和printf与cout之间的奇怪交互

Strange interaction between popen() and printf vs. cout in C++

本文关键字:之间 cout 交互 printf popen c++      更新时间:2023-10-16

在没有看到所有源代码和库等的情况下,任何人都可以回答这个问题,这可能是一个很长的机会,但我会尝试。

我有一个用boost-1.41用c++写的程序X。如果Xstd::cout一起输出,那么在另一个程序中使用fp=popen("X", "r")运行X,可以通过fgets(buff, 1024, fp)看到X的输出。

现在,如果我改变X使用printf()而不是std::cout, X的输出不再可见。但是,从bash运行X会产生预期的输出。

怎么解释这种差异呢?!我怀疑这里涉及到boost,但我对boost了解不多。

注意:我很高兴坚持std::cout,我的问题解决了。但我试图了解printf()的问题是什么。

原因是您可能将std::endlstd::cout一起使用。除了写入换行符外,还会刷新输出缓冲区。

要对printf做同样的事情,您可以在调用后添加fflush(stdout);