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

How can I print a string with newline without flushing the buffer?

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

printf("Something.\n");

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

有点问同样的事情,但问的是 C++ 而不是 C。我不知道如何通过阅读该问题的答案来收集如何在 C 中执行此操作(所以它不是重复的)。

如评论中所述,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.

之前