文件缓冲区

news2024/11/24 17:56:28

在这里插入图片描述

本期介绍🍖
主要介绍:什么是文件缓冲区,文件缓冲区存在的意义是什么,文件缓冲区的证明👀。


一、什么是文件缓冲区

  每一个正在使用的文件,操作系统都会为其在内存中开辟一块区域,称之为:文件缓冲区。每当我们想从内存向硬盘中输出数据,都会先将数据输送到缓冲区中,然后装满缓冲区后才一起输送到硬盘上。如果想从硬盘向计算机内读入数据,则会先将读到的数据输送到缓冲区中,装满缓冲区后再逐个将数据输送到程序数据区(内存中的变量)。如下图所示:

在这里插入图片描述

  注意:文件缓冲区的大小是由C语言编译系统来决定的。


二、文件缓冲区存在的意义

  文件缓冲区就是:读写文件时数据传输过程的一个中间环节。那有人就要问了:内存中的数据难道不因该是直接输出到外存上去的吗,为什么中间还需要多一层文件缓冲区?那文件缓冲区存在的目的是什么呀?为什么文件缓冲区需要装满后再输送?

  先问大家一个问题:当我们用fwrite()这样的函数写数据时,难道真的光靠它就能将数据直接扔到文件里去了吗? 当然不是,像fwrite()这样的函数是要进行系统调用后才能将数据最终写到文件中去(所谓系统调用就是:由操作系统来代替我们去做一些事情,譬如代替我们写文件之类的)。既然我们在写数据的过程中,会让操作系统调用接口来替我们做一些事情,那么写数据这个操作就必然会打断操作系统。如果频繁的写数据,就譬如4个字节写一次,4个字节写一次,那么操作系统必然会被频繁的打断。操作系统啥事都不用干了,天天来服务你一个就够了!!!这是不现实的。

  所以为了不会因为频繁的操作而打断操作系统,我们会在内存中另外开辟一块空间,用于存放需要传输的数据,直到缓冲区被放满,再由操作系统一次性全部输送到硬盘中去。可以这么理解:文件缓冲区在写文件的时候提高整个操作系统的效率,在读文件的时候提高了程序的效率


三、证明文件缓冲区的存在

  下面让我们一起来看一个函数,证明文件缓冲区是真实存在的。代码如下:

#include<stdio.h>
#include<Windows.h>

int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒——已经写数据了,打开test.txt文件,发现文件没有内容\n");
	Sleep(10000);

	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时,才将缓冲区中的数据写到文件中去
	printf("睡眠10秒——此时再次打开test.txt文件,文件中有内容了\n");
	Sleep(1000);

	fclose(pf);
	pf = NULL;
	return 0;
}

在这里插入图片描述

  注意:flose()在关闭文件的时候也会刷新缓冲区。


在这里插入图片描述

这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】带头双向链表的简单实现

目录前言链表的实现List.hList.c**ListCreate()****LTInit()****ListPushBack()****ListPopBack()****ListPrint()****ListPushFront()****ListPopFront()****ListFind()****ListInsert()****ListErase()**ListErase()test.c前言 该篇博客主要讲解了带头双向链表的实现和一些细…

Cadence Allegro DXF结构图的导入详细教程

很多消费类板卡的结构都是异形的&#xff0c;由专业的CAD结构工程师对其进行精准的设计&#xff0c;PCB布线工程师可以根据结构工程师提供的2D图&#xff08;DWG或DXF格式&#xff09;进行精准的导入操作&#xff0c;在PCB中定义板型结构。 同时&#xff0c;对于一些工控板或者…

Ajax--跨域与JSONP--案例-淘宝搜索

要实现的UI效果 获取用户输入的搜索关键词 为了获取到用户每次按下键盘输入的内容&#xff0c;需要监听输入框的 keyup 事件&#xff0c;示例代码如下&#xff1a; // 监听文本框的 keyup 事件$(#ipt).on(keyup, function() {// 获取用户输入的内容var keywords $(this).val…

支撑向量机

1、支持向量机算法原理 支持向量机&#xff08;Support Vetor Machine&#xff0c;SVM&#xff09;由Vapnik等人于1995年首先提出&#xff0c;在解决小样本、非线性及高维模式识别中表现出许多特有的优势&#xff0c;并推广到人脸识别、行人检测和文本分类等其他机器学习问题中…

HTML期末作业:基于html+css+javascript+jquery实现古诗词网页 学生网页设计作品 web前端开发技术 web课程设计 网页规划与设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

初学C语言有什么建议?

什么&#xff1f;开玩笑&#xff0c;新手学C语言&#xff1f; 确实新手不学C语言学什么呢&#xff1f;为什么这么推荐新手学C语言呢具体看看下面的解释吧&#xff1f; C的重要性 我总结了网上很多人的说法如下&#xff1a; C语言是计算机界公认的有史以来最重要的语言。C语…

R语言偏相关和典型相关

本文首发于公众号&#xff1a;医学和生信笔记&#xff0c;完美观看体验请至公众号查看本文。 文章目录偏相关&#xff08;partial correlation&#xff09;偏相关散点图典型相关&#xff08;Canonical Correlation&#xff09;使用R语言实现偏相关分析和典型相关分析&#xff0…

一个对C#程序混淆加密,小巧但够用的小工具

对于我们程序员来说&#xff0c;平常开发的桌面应用程序&#xff0c;如果不进行一定程度的加密、混淆&#xff0c;是很容易通过反编译手段进行破解的&#xff0c;特别是一些商业用途的C#软件&#xff0c;更是容易被破解。 所以今天给大家推荐一个对C#程序加密混淆项目&#xf…

脱离CRUD苦海 !性能优化全栈小册来了!

性能优化 随着互联网的高速发展&#xff0c;互联网行业已经从IT时代慢慢步入到DT时代。对于Java程序员的要求越来越高&#xff0c;只是单纯的掌握CRUD以不足以胜任互联网公司的相关职位&#xff0c;大量招聘岗位显示&#xff1a;如果是面试中高级的Java岗&#xff0c;基本上都…

flex1时内容溢出

目标效果&#xff1a;右边黄色部分填充减去红色部分的剩余部分 原理: flex: 1 代码&#xff1a; <div class"box"><div class"inner-left"></div><div class"inner-right"><span class"inner-right-content&…

RK3568平台开发系列讲解(NPU篇)让 NPU 跑起来

🚀返回专栏总目录 文章目录 一、在 Android 系统中使用 NPU1.1、下载编译所需工具1.2、修改编译工具路径1.3、更新 RKNN 模型1.4、编译 demo沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何让NPU跑起来。 一、在 Android 系统中使用 NPU 下载 rknpu2 …

Hadoop的eclipse搭建(客观莫划走,留下来看一眼(适用人群学生初学,其他人看看就行))

前言&#xff1a;Hadoop的eclipse搭建是建立在Hadoop的安装之后进行的&#xff0c;因为Linux上的Hadoop和Windows上的Hadoop版本要求一致&#xff0c;不一致可能会出现某些问题 准备工作&#xff1a;Java的安装包、eclipse的安装包、Hadoop的包&#xff08;Windows的Hadoop安装…

基于Socket编程下 实现Linux-Linux、Linux-Windows udp通信

文章目录一、通信实现二、Linux-Linux1. 服务器 Server2. 客户端 Client三、Linux-Windows1. 服务器 Linux_Server2. 客户端 Windows_Client程序源码一、通信实现 1. Linux-Linux 在虚拟机下开启俩个终端&#xff0c;分别运行服务器和客户端程序(服务器运行在前&#xff0c;客…

栈的简单实现及应用

栈的简单实现及其应用什么是栈&#xff1f;栈的分类栈的数据结构栈的基本操作栈的初始化栈的销毁入栈操作出栈和栈空的判断获取栈顶元素获取栈的元素个数头文件总结栈的应用什么是栈&#xff1f; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除…

【毕业设计】垃圾邮件(短信)分类算法研究与实现 - 机器学习

文章目录1 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后1 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#…

Vue面试题-答案、例子

1、Vue的生命周期 每一个vue实例从创建到销毁的过程&#xff0c;就是这个vue实例的生命周期。在这个过程中&#xff0c;他经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程。 将要创建 >调用beforeCreate函数 创建完毕 >调用creat…

振弦采集模块复位( 重启)及恢复出厂设置

振弦采集模块复位&#xff08; 重启&#xff09;及恢复出厂设置 以下几种情况&#xff08;或操作&#xff09;可使模块产生复位动作&#xff0c;重新启动。 &#xff08; 1&#xff09; 在模块正常工作期间&#xff0c;向寄存器 SYS_FUN 发送软复位指令 0x01&#xff1b; &…

74ls192无法正常使用。

分析与解决74ls192芯片无法在proteus中正常运行 博主最近要做电子技术课程设计&#xff0c;于是重新拾起了长久不用的proteus。在构建倒计时电路时&#xff0c;发现了一个问题&#xff1a; 74ls192芯片&#xff0c;在软件提供的时钟信号下能正常开启计时。但是在自己使用的55…

从理论到实践:MySQL性能优化和高可用架构,一次讲清

数据库系统作为IT业务系统的核心&#xff0c;其高可用性和容灾能力对整个业务系统的连续性和数据完整性起着至关重要的作用&#xff0c;是企业正常运营的基石 尤其是在性能优化与高可用架构两方面&#xff0c;很多从业多年的DBA限于生产环境的固定体系&#xff0c;往往盲人摸象…

Grafana-web使用说明

本文分别记录了&#xff1a; Grafana使用步骤P50 P99 min max m1_rate等指标分别是什么意思&#xff0c;Metrics为何不会对“吞吐量”指标记录P99 min 等聚合Metrics常用的几种记录方式&#xff08;我司用了两种&#xff09; 1.场景 Metrics收集日志交给Graphite&#xff08;…