为什么带有 \n 的 printf() 在 Windows 上仍然无法刷新?

Xun*_*nie 3 c windows flush mingw-w64 msys2

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

作为这个问题的变体,在什么条件下printf()不冲洗?


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

#include <stdio.h>

int main() {
        while(1) {
                printf("test\n");
                Sleep(1);
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

phu*_*clv 5

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

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

设置缓冲区

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