16

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

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

#include <iostream>

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

1 回答 1

40

您可以通过调用以下方法将标志设置为在每次输出操作后刷新输出:std::ios_base::unitbuf std::ios_base::setf

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

或使用机械手std::unitbuf

std::cout << std::unitbuf;
于 2009-09-04T03:34:55.800 回答