首页 > 其他分享 >搞懂fflush(stdout)

搞懂fflush(stdout)

时间:2023-09-16 22:33:40浏览次数:32  
标签:ctr stdout delay 屏幕 printf 缓冲区 搞懂 fflush

使用 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 的作用就是直接把缓冲区的内容打印到屏幕上,并清空缓冲区。不必等换行符



标签:ctr,stdout,delay,屏幕,printf,缓冲区,搞懂,fflush
From: https://www.cnblogs.com/keep--fighting/p/17707433.html

相关文章

  • MySQL实战实战系列 00 开篇词 这一次,让我们一起来搞懂MySQL
    你好,我是林晓斌,网名“丁奇”,欢迎加入我的专栏,和我一起开始MySQL学习之旅。我曾先后在百度和阿里任职,从事MySQL数据库方面的工作,一步步地从一个数据库小白成为MySQL内核开发人员。回想起来,从我第一次带着疑问翻MySQL的源码查到答案至今,已经有十个年头了。在这个过程中,......
  • 网络协议百科全书:28张图带你搞懂TCP
    大家好,我的网工朋友。不仅仅是网工,只要你是做IT相关的工作,肯定都离不开网络。那网络中最重要的协议,大概非TCP莫属,谁去面试没被问过网络协议的相关问题?谁没买过那本最经典的《TCP/IP详解》 。不得不说,既要看枯燥的讲解,还要理解,还要和工作结合,运用掌握……真没这么简单。而且不学也......
  • Python教程:sys.stdout方法
    Python中sys模块中的一个方法是stdout,它使用其参数直接显示在控制台窗口上。这些种类的输出可以是不同的,像一个简单的打印语句,一个表达式,或者一个输入提示。print()方法,它有相同的行为,首先转换为sys.stdout()方法,然后在控制台显示结果。sys.stdout方法的语法sys.stdout......
  • 12分钟从Executor自顶向下彻底搞懂线程池
    前言上篇文章13分钟聊聊并发包中常用同步组件并手写一个自定义同步组件聊到并发包中常用的同步组件,并且还手把手实现了自定义的同步组件本篇文章来聊聊并发包下的另一个核心-线程池阅读本文大概12分钟通读本篇文章前先来看看几个问题,看看你是否以及理解线程池什么是池化技......
  • 15000字、6个代码案例、5个原理图让你彻底搞懂Synchronized
    Synchronized本篇文章将围绕synchronized关键字,使用大量图片、案例深入浅出的描述CAS、synchronizedJava层面和C++层面的实现、锁升级的原理、源码等大概观看时间17分钟可以带着几个问题去查看本文,如果认真看完,问题都会迎刃而解:1、synchronized是怎么使用的?在Java层面是如何......
  • 10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)
    10分钟从源码级别搞懂AQS(AbstractQueuedSynchronizer)前言上篇文章15000字、6个代码案例、5个原理图让你彻底搞懂Synchronized有说到synchronized由objectmonitor实现的objectmonitor中由cxq栈和entrylist来实现阻塞队列,waitset实现等待队列,从而实现synchronized的等待/通知......
  • 20,000+ 字,彻底搞懂 Kafka!
    1、为什么有消息系统1、解耦合2、异步处理例如电商平台,秒杀活动。一般流程会分为:风险控制库存锁定生成订单短信通知更新数据通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:风险控制库存锁定消息系统生成订单短信通知更新数据......
  • 【pytorch】目标检测:一文搞懂如何利用kaggle训练yolov5模型
    笔者的运行环境:python3.8+pytorch2.0.1+pycharm+kaggle。yolov5对python和pytorch版本是有要求的,python>=3.8,pytorch>=1.6。yolov5共有5种类型n\s\l\m\x,参数量依次递增,对训练设备的要求也是递增。本文以yolov5_6s为切入点,探究yolov5如何在实战种运用。1.数据集的准备roboflow......
  • 万字长文彻底搞懂二叉树
    算法是面试考察的重点,数据结构是算法的根基。今天主要和大家探讨下数据结构中的二叉树,当然也不仅限于二叉树,还有其他类型的扩展。1基础知识一棵树由称作跟的节点r以及0个或多个非空的树T1,T2,...Tk组成,这些子树中每一颗的根都被来至根r的一条有向的边所连接。深度:对任意......
  • 搞懂URL
    搞懂URLby:网盾安全学院h1ck0r"网址"并不是特别的准确,确切地说,应该叫做URL<?php$a=$_GET['a'];$b=$_GET['b'];$c=$_GET['c'];echo$a.''.$b.''.$c;?>......