任何人都可以在没有看到所有源代码和库等的情况下回答这个问题,这可能是一个很长的镜头,但我会尝试。
我有一个使用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()
的问题。
答案 0 :(得分:3)
原因是您可能将std::endl
与std::cout
一起使用。除了编写换行符之外,还会刷新输出缓冲区。
要对printf
执行相同操作,您只需在通话后添加fflush(stdout);
即可。