首页 > 解决方案 > 为什么带有 \n 的 printf() 仍然无法在 Windows 上刷新?

问题描述

我的 Windows 程序(使用 MSYS2 MINGW64 编译)以大块的形式输出其stdout数据。带有 a的printf()调用\n无法正确刷新输出。

作为这个问题的一个变体,在什么情况下不printf()刷新?


例如,以下代码在 MSYS2 MINGW64 上以块的形式输出:

#include <stdio.h>

int main() {
        while(1) {
                printf("test\n");
                Sleep(1);
        }
        return 0;
}

标签: cwindowsmingw-w64flushmsys2

解决方案


在 Windows 上没有行缓冲,只有没有和完全缓冲

  • _IOLBF
    • 对于某些系统,这提供了行缓冲。但是,对于 Win32,其行为与_IOFBF- Full Buffering 相同。

设置vbuf

等待一段时间,直到缓冲区已满,或者自己刷新缓冲区。或者,您可以减小缓冲区大小,setvbuf()以便更频繁地刷新


推荐阅读