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

时间:2011-10-26 21:28:11

标签: c++ printf popen cout

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

我有一个使用boost-1.41用C ++编写的程序X。如果X输出std::cout,则使用X从其他程序运行fp=popen("X", "r")可以通过X查看fgets(buff, 1024, fp)的输出。< / p>

现在,如果我将X更改为使用printf()而不是std::cout,则不会再看到X的输出。但是,从bash运行X会按预期生成输出。

有什么可以解释这种差异?!我怀疑这里涉及到提升,但我对提升知之甚少。

注意:我很高兴坚持std::cout,我的问题就解决了。但我正在尝试了解printf()的问题。

1 个答案:

答案 0 :(得分:3)

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

要对printf执行相同操作,您只需在通话后添加fflush(stdout);即可。