搞懂fflush(stdout)

使用 printf 或 cout 打印内容时,输出永远不会直接写入“屏幕”。而是,被发送到 stdout。 (stdout 就像一个缓冲区)

默认情况下,发送到 stdout 的输出然后再发送到屏幕(我们可以根据需要将其重定向到其他文件/流)。同样,stdin 默认映射到键盘,但可以重定向到任何其他文件/流。

现在,默认情况下,stdout 是行缓冲的。这意味着,发送到 stdout 的输出不会被立即发送到屏幕以供显示(或重定向文件/流),直到它在其中获得换行符。因此,如果要覆盖默认缓冲行为,则可以使用 fflush 清除缓冲区(立即将所有内容发送到屏幕/文件/流)。

例子#

#include <stdio.h>

void delay(unsigned long long ctr)
{
    while (ctr > 0)
        --ctr;
}

int main()
{
    printf("Hello, ");
    delay(1000000000ULL);

    printf("world!\n");
    delay(1000000000ULL);

    printf("Welcome.\n");
    return 0;
}

过一段时间后输出 hello world! 再过一段时间输出 Welcome.

#include <stdio.h>

void delay(unsigned long long ctr)
{
    while (ctr > 0)
        --ctr;
}

int main()
{
    printf("Hello, ");
    fflush(stdout);
    delay(1000000000ULL);

    printf("world!\n");
    delay(1000000000ULL);

    printf("Welcome.\n");
    return 0;
}

立即输出 Hello, 过一段时间输出 world!,又过一段时间输出 Welcome.

 

就单拿输出到屏幕上来说,printf 这样的函数不是直接打印到屏幕上的,而是先放在一个缓冲区中(stdout)中。如果收到了一个换行符,就会把这个缓冲区的内容打印到屏幕上,并清空。而 fflush 的作用就是直接把缓冲区的内容打印到屏幕上,并清空缓冲区。不必等换行符



作者:keep--fighting

出处:https://www.cnblogs.com/keep--fighting/p/17707433.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   ⭐⭐-fighting⭐⭐  阅读(977)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
历史上的今天:
2021-09-16 Linux 下 C语言 open() 和 fopen() 区别
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示