【Linux】输出缓冲区和fflush刷新缓冲区

目录

一、输出缓冲区 

1.1 输出缓冲区的使用 

1.2 缓冲区的刷新 

1.3 输出缓冲区的作用

二、回车换行


一、输出缓冲区 

C/C++语言,当调用输出函数(如printf()、puts()、fwrite()等)时,会给我们提供默认的缓冲区。这些数据先存放在输出缓冲区中,然后再按照一定规则输出到目标设备(如终端、文件、网络等)。

1.1 输出缓冲区的使用 


上面的结果是:等待两秒后,字符串打印到屏幕上。

如果想让它立即显示两种常用方法

  1. 在字符串尾部加上换行符 '\n'
    printf("Hello CSDN!\n"); 
  2. 在printf语句后调用 fflush() 函数

1.2 缓冲区的刷新 

以上的两种方法都是为了刷新缓冲区,将缓冲区中的内容立即输出到目标设备上。

在C语言中,有以下几种方式可以刷新输出缓冲区:

  1. 自动刷新:缓冲区被填满、程序正常结束或者遇到换行符。
  2. 手动刷新: 调用fflush函数。

    例如fflush(stdout); 会将缓冲区内容输出到目标设备上。
  3. 缓冲模式设置:可以使用setbuf()函数或setvbuf()函数设置缓冲区的大小和刷新方式。
  4. 程序退出时刷新:当程序正常终止时,输出缓冲区通常会被自动刷新。但是,如果程序异常终止(如调用exit()函数)或者使用非正常的终止方式(如abort()函数),输出缓冲区可能不会被刷新。

1.3 输出缓冲区的作用

  • 减少系统调用:输出操作通常比较耗时(因为每一次打印符号到显示器上的时候都需要访问外设,效率较低),因此将多个输出操作合并到一个缓冲区中,可以减少系统调用的次数,从而提高程序的运行效率。

  • 改善输出效果:通过控制缓冲区的大小和刷新时间,可以更好地控制输出的效果。
    例如,可以设置缓冲区大小为一行文字的长度,并在每行文字结束时立即刷新缓冲区,从而实现逐行输出的效果。

  • 提高可移植性:不同操作系统和编程语言对输出缓冲区的实现方式不同,但它们都提供了类似的接口。因此,使用输出缓冲区可以提高程序的可移植性,使得程序更容易在不同的平台上运行。

  • 避免阻塞:当输出设备(如终端、文件、网络等)比较慢时,输出缓冲区可以避免程序被阻塞。程序可以先将数据存储到缓冲区中,然后继续执行其他操作,直到输出设备就绪后再将数据输出。


二、回车换行

回车换行包含两件事情:

  1. 换行:换到下一行
  2. 回车:让对应的光标回到本行最开始

\r   表示只回车,光标回到本行最开始。
\n  表示换行,在Linux中表示换行和回车

老式回车键设计成以下形状也是这个原因,告诉我们是换行、回车 

利用以上知识点就可以做一个简单的倒计时程序:

#include <stdio.h>    
#include <unistd.h>    
int main()    
{    
   for(int i = 10; i >=0; i--)    
   {    
       printf("%-2d\r",i);                                                                       
       fflush(stdout);    
       sleep(1);    
   }    
    printf("\n");    
    return 0;    
}  

关于回车和换行的用法也有很多,大家可以自行尝试一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/232943.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python绘制多分类ROC曲线

目录 1 数据集介绍 1.1 数据集简介 1.2 数据预处理 2随机森林分类 2.1 数据加载 2.2 参数寻优 2.3 模型训练与评估 3 绘制十分类ROC曲线 第一步&#xff0c;计算每个分类的预测结果概率 第二步&#xff0c;画图数据准备 第三步&#xff0c;绘制十分类ROC曲线 1 数据集…

C++学习笔记之五(String类)

C 前言getlinelength, sizec_strappend, inserterasefindsubstrisspace, isdigit 前言 C是兼容C语言的&#xff0c;所以C的字符串自然继承C语言的一切字符串&#xff0c;但它也衍生出属于自己的字符串类&#xff0c;即String类。String更像是一个容器&#xff0c;但它与容器还…

uniapp如何制作一个收缩通讯录(布局篇)

html&#xff1a; <view class"search"><view class"search_padding"><u-search change"search" placeholder"请输入成员名称" v-model"keyword"></u-search></view></view> <view…

【面试经典150 | 二叉树】从中序与后序遍历序列构造二叉树

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;递归 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容…

2020年第九届数学建模国际赛小美赛A题自由泳解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 A题 自由泳 原题再现&#xff1a; 在所有常见的游泳泳姿中&#xff0c;哪一种最快&#xff1f;哪个冲程推力最大&#xff1f;在自由泳项目中&#xff0c;游泳者可以选择他们的泳姿&#xff0c;他们通常选择前面的爬行。然而&#xff0c;游泳…

中文分词演进(查词典,hmm标注,无监督统计)新词发现

查词典和字标注 目前中文分词主要有两种思路&#xff1a;查词典和字标注。 首先&#xff0c;查词典的方法有&#xff1a;机械的最大匹配法、最少词数法&#xff0c;以及基于有向无环图的最大概率组合&#xff0c;还有基于语言模型的最大概率组合&#xff0c;等等。 查词典的方法…

esxi全称“VMware ESXi

esxi全称“VMware ESXi”&#xff0c;是可直接安装在物理服务器上的强大的裸机管理系统&#xff0c;是一款虚拟软件&#xff1b;ESXi本身可以看做一个操作系统&#xff0c;采用Linux内核&#xff0c;安装方式为裸金属方式&#xff0c;可直接安装在物理服务器上&#xff0c;不需…

TCP传输数据的确认机制

实际的TCP收发数据的过程是双向的。 TCP采用这样的方式确认对方是否收到了数据&#xff0c;在得到对方确认之前&#xff0c;发送过的包都会保存在发送缓冲区中。如果对方没有返回某些包对应的ACK号&#xff0c;那么就重新发送这些包。 这一机制非常强大。通过这一机制&#xf…

Redis如何做内存优化?

Redis如何做内存优化&#xff1f; 1、缩短键值的长度 缩短值的长度才是关键&#xff0c;如果值是一个大的业务对象&#xff0c;可以将对象序列化成二进制数组&#xff1b; 首先应该在业务上进行精简&#xff0c;去掉不必要的属性&#xff0c;避免存储一些没用的数据&#xff1…

博途PLC SCL间接寻址编程应用

这篇博客里我们将要学习Pointer和Any指针&#xff0c;PEEK和POKE指令&#xff0c;当然我们还可以数组类型数据实现数组指针寻址&#xff0c;具体应用介绍请参考下面文章链接&#xff1a; https://rxxw-control.blog.csdn.net/article/details/134761364https://rxxw-control.b…

15.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

摘要&#xff1a; 本研究旨在设计并实现一款基于SSM框架的微信小程序校园求职系统&#xff0c;以提升校园求职流程的效率和便捷性。通过整合微信小程序平台和SSM框架的优势&#xff0c;本系统涵盖了用户管理、职位发布与搜索、简历管理、消息通知等多个功能模块&#xff0c;为…

分子生成领域的stable diffusion - GEOLDM

一、关于stable diffusion 很多人都知道stable diffusion&#xff0c;stable diffusion的出现改变了机器生成领域&#xff0c;让AI技术第一次无比的接近正常人。大语言模型&#xff0c;AIGC概念于是兴起。基于stable diffusion 大家开发了lora&#xff0c; hyperwork等微调技术…

【VS Code】Visual Studio Code 你必须安装的 Plugins - 持续更新

文章目录 GitLens — Git supercharged【真香】EditorConfig for VS Code【真香】Remote - SSH【真香】MySQL【真香】 Talk is cheap, show me the code. GitLens — Git supercharged【真香】 插件地址&#xff1a; https://marketplace.visualstudio.com/items?itemNameeam…

C语言有哪些预处理操作?

C语言的预处理是在编译之前对源代码进行处理的阶段&#xff0c;它主要由预处理器完成。预处理器是一个独立的程序&#xff0c;它负责对源代码进行一些文本替换和处理&#xff0c;生成经过预处理的代码。以下是C语言预处理的一些重要特性&#xff1a; 1&#xff0c;头文件包含 #…

侮辱性涨薪!业绩得了S,调薪涨了450

信安这个行业3年前各大媒体&#xff0c;信安自己人都觉得自己在个朝阳行业&#xff0c;红利在咋弄不得再吃5年。 现在拉个干网络安全的再去问问&#xff0c;看看谁不是去年年终奖砍了一半、或者根本就没了&#xff0c;再或者每天岌岌可危生怕去领大礼包。 原本10月份的激励性…

python变量的命名和使用

变量名只能包含字母、数字和下划线 变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头&#xff0c;但不能以数字打头。例如&#xff0c;可将变量命名为message_1&#xff0c;但不能将其命名为1_message。 Python 语言中&#xff0c;以下划线开头的标识符有特殊含…

Android 相机库CameraView源码解析 (五) : 保存滤镜效果

1. 前言 这段时间&#xff0c;在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位&#xff0c;在项目前期&#xff0c;的确为我们节省了不少时间。 但随着项目持续深入&#xff0c;对于CameraView的使用进入深水区&#xff0c;逐…

若依vue-新建目录及菜单

前面我们把标题和logo换成了自己系统的标题和logo了 接下来就是要建立自己需要的菜单和页面 新建目录解析 在拉下来的代码跑起来后 有一个系统菜单--菜单管理(如图) 在这个菜单的这个页面内有对应的操作功能 修改功能 这个功能可以修改写好了的菜单数据 例如:名称/排序/路由…

(一)五种最新算法(SWO、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;简介 1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为&…

vscode 编译运行c++ 记录

一、打开文件夹&#xff0c;新建或打开一个cpp文件 二、ctrl shift p 进入 c/c配置 进行 IntelliSense 配置。主要是选择编译器、 c标准&#xff0c; 设置头文件路径等&#xff0c;配置好后会生成 c_cpp_properties.json&#xff1b; 二、编译运行&#xff1a; 1、选中ma…