文件底层的理解之缓冲区

简介: 文件底层的理解之缓冲区



一、缓冲区的初步认识

       缓冲区其实就是一块内存区域,采用空间来换时间,可以提高使用者的效率。我们一直说的缓冲区其实是语言层面上的缓冲区,其实操作系统内部也有自己的缓冲区,但是我们一般不谈,因为操作系统在设计的时候就默认屏蔽了底层的一切细节,所有我们所谈的缓冲区就是语言层面上的缓冲区,也就是说C语言、C++等语言在设计的时候都设计了缓冲区(可以支持输入输出的格式化操作)。

       上面这张图我们在之前的博客中也有所提及,我们可以看到,语言层面的缓冲区其实封装在struct file结构体内部的,也就是说,一个文件一个缓冲区

二、向文件中写数据的具体过程

       以C语言来举例,用户在调用fwrite、fputs这些函数的时候,并不是直接将数据写入到了操作系统内部(因为系统调用时有成本的),而是先将数据写入到了语言层面的缓冲区中,在数据积累到一定程度或者到了合适的时候,再由系统调用接口将数据拷贝到操作系统内部自己的缓冲区中,最后由操作系统帮我们把数据写入到磁盘当中。这就好比收发快递的过程,你把快递送到快递站,快递站并不会马上帮你发货,而是会等到快递积累到一定程度以后再统一发货,快递到达另外一个快递站后也不会直接送给用户,同样会等到快递积累到一定程度再由快递员统一配送。这就是向文件中写数据的具体过程。在用户层面,在调用fwrite、fputs这些函数的时候你只需要将数据写入缓冲区里就可以直接返回了,这大大提高了这些C语言函数的使用效率。这种设计理念与思想可能就是C语言效率高的由来。

三、缓冲区刷新的时机

如果用户强制刷新,缓冲区的内容就会直接写入操作系统;

进程退出的时候,缓冲区也会刷新;

如果是按行刷新,遇到‘\n’缓冲区就会刷新(显示器文件);

缓冲区写满时就会自动刷新(普通文件)。

相关文章
|
前端开发 JavaScript 数据安全/隐私保护
推荐6款超级好看的开源中后台前端框架
推荐6款超级好看的开源中后台前端框架
2226 0
|
存储 Linux C++
|
11月前
|
机器学习/深度学习 人工智能 PyTorch
从零开始:如何训练自己的AI模型
### 从零开始:如何训练自己的AI模型 训练AI模型如同培养新生儿,需耐心与技巧。首先明确目标(如图像识别、自然语言处理),选择框架(TensorFlow、PyTorch)。接着收集并预处理数据,确保多样性和准确性。然后设计模型结构,如卷积神经网络(CNN),并通过代码实现训练。训练后评估模型性能,调优以避免过拟合。最后部署模型至实际应用。通过猫狗分类器案例,掌握关键步骤和常见问题。训练AI模型是不断迭代优化的过程,实践才能真正掌握精髓。
|
存储 人工智能 安全
操作系统的心脏——内核深度解析
【10月更文挑战第29天】 本文深入探讨了操作系统的核心组件——内核,包括其定义、功能、架构以及在现代计算中的重要性。通过对比不同操作系统内核的设计哲学和技术实现,揭示了内核如何影响系统性能、稳定性和安全性。此外,文章还讨论了未来内核技术的潜在发展方向,为读者提供了一个全面了解内核工作原理的平台。
|
安全 Unix Linux
深入理解 Linux 内核3
深入理解 Linux 内核
394 2
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的旅游出行指南附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的旅游出行指南附带文章源码部署视频讲解等
222 0
|
机器学习/深度学习 算法 机器人
深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)
深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)
533 0
|
网络协议
Mac下访问github网址速度慢或者无法访问终极解决方案
Mac下访问github网址速度慢或者无法访问终极解决方案
|
存储 程序员
【汇编】Loop指令、段前缀
【汇编】Loop指令、段前缀
1389 0
【汇编】Loop指令、段前缀
|
前端开发 程序员 数据处理
硅谷的主干道:深度解析计算机总线的秘密
硅谷的主干道:深度解析计算机总线的秘密
884 0