如何在不刷新缓冲区的情况下使用换行符打印字符串?

时间:2016-10-24 21:23:51

标签: c printf flush

当我这样做时(请注意包含的\n):

printf("Something.\n");

我希望来刷新缓冲区。我想稍后手动冲洗它 这可能吗?

This question有点问同样的问题,但问C ++而不是C.我不知道如何通过阅读这个问题的答案来收集如何在C中做到这一点(所以它& #39;不重复)。

1 个答案:

答案 0 :(得分:2)

如评论中所述,setvbuf可用于更改任何文件流的缓冲,包括stdout

这是一个简单的例子:

#include <stdio.h>
#include <unistd.h>

int main(void)
{
    setvbuf(stdout, NULL, _IOFBF, 0);
    printf("hello world\n");
    sleep(5);
}

该示例使用setvbuf使stdout完全缓冲。这意味着它在遇到换行符时不会立即输出。该示例仅显示sleep后的输出(退出时刷新)。如果没有setvbuf,输出将显示在sleep之前。