2009-09-04 103 views
11

如何从cout获得无缓冲输出,以便它立即写入控制台而无需刷新(与cerr类似)?使用cout无缓冲输出

我认为这可以通过rdbuf() - > pubsetbuf完成,但这似乎不起作用。下面的代码片段应该立即输出到控制台,然后等待几秒钟。但是,它只是等待,并且只在程序退出并且缓冲区被刷新时才会输出。

#include <iostream> 

int main() 
{ 
     std::cout.rdbuf()->pubsetbuf(0, 0); 
     std::cout << "A"; 
     sleep(5); 
} 

回答

32
std::cout.setf(std::ios::unitbuf); 

应该做的伎俩。

+0

这个解决方案确实为我工作,谢谢!对其他人的提示:使用cout或printf时缓冲似乎会发生,即使在行末使用了换行符也会发生缓冲。 – Moot 2017-05-05 06:13:44