【问题标题】:How can I print a string with newline without flushing the buffer?如何在不刷新缓冲区的情况下使用换行符打印字符串?
【发布时间】:2016-10-24 21:23:51
【问题描述】:

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

printf("Something.\n");

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

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

【问题讨论】:

  • Here 是您的选择。
  • @EugeneSh。所以你说的是stdout 处于_IOLBF 模式(行缓冲),我应该使用setvbuf 将其切换到_IOFBF 模式(全缓冲)?
  • 试试并告诉我们..
  • @EugeneSh。我可以看到它将如何使用,但我不确定如何使用它(具体来说,我不知道为char *buf 参数传递什么)。你能回答这个问题吗?
  • 如果您阅读文档,它会解释这一点。只需将 NULL 传递给 buf 参数,setvbuf 将为您处理。

标签: c printf flush


【解决方案1】:

如 cmets 中所述,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 之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多