如何在不刷新缓冲区的情况下用换行符打印字符串?
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
.
之前
当我这样做时(注意包含的 \n
):
printf("Something.\n");
我希望不刷新缓冲区。我想稍后手动冲洗它。
这可能吗?
如评论中所述,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
.