【问题标题】:Unbuffered output with cout带 cout 的无缓冲输出
【发布时间】:2009-09-04 03:30:38
【问题描述】:

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

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

#include <iostream>

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

【问题讨论】:

    标签: c++ cout


    【解决方案1】:

    您可以通过调用std::ios_base::setfstd::ios_base::unitbuf flag 设置为在每次输出操作后刷新输出:

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

    或使用std::unitbuf manipulator:

    std::cout << std::unitbuf;
    

    【讨论】:

    • 这个解决方案确实对我有用,谢谢!给其他人的提示:使用 cout 或 printf 时似乎会发生缓冲,即使在行尾使用换行符也会发生。
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多