news 2026/8/30 8:51:49

文件缓冲区

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文件缓冲区

一.理解“一切皆文件”

1.⾸先,在windows中是⽂件的东西,它们在linux中也是⽂件;其次⼀些在windows中不是⽂件的东西,⽐如进程、磁盘、显⽰器、键盘这样硬件设备也被抽象成了⽂件,你可以使⽤访问⽂件的⽅法访问它们获得信息;甚⾄管道,也是⽂件;这样做最明显的好处是,开发者仅需要使⽤⼀套 API 和开发⼯具,即可调取 Linux 系统中绝⼤部分的资源。举个简单的例⼦,Linux 中⼏乎所有读(的操作都可以⽤read函数来进⾏;⼏乎所有更改的操作都可以⽤ write函数来进⾏

2.补充知识:重谈重定向,stderr

二.文件缓冲区

1 什么是缓冲区

内存的一段空间

缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间⽤来缓冲输⼊或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输⼊设备还是输出设备,分为输⼊缓冲区和输出缓冲区。

2 为什么要引⼊缓冲区机制

提高效率(提高使用者的效率)

使用者:比如A进程要对屏幕进行输出,增加缓冲区就是先把要对屏幕输出的内容放在缓冲区内,当满足一定条件时,一次调用系统调用对屏幕文件进行写入,这时就提高了A进程的效率,A进程在此则为使用者。

读写⽂件时,如果不会开辟对⽂件操作的缓冲区,直接通过系统调⽤对磁盘进⾏操作(读、写等),那么每次对⽂件进⾏⼀次读写操作时,都需要使⽤读写系统调⽤来处理此操作,即需要执⾏⼀次系统调⽤,执⾏⼀次系统调⽤将涉及到CPU状态的切换,即从⽤⼾空间切换到内核空间,实现进程上下⽂的切换,这将损耗⼀定的CPU时间,频繁的磁盘访问对程序的执⾏效率造成很⼤的影响。为了减少使⽤系统调⽤的次数,提⾼效率,我们就可以采⽤缓冲机制。⽐如我们从磁盘⾥取信息,可以在磁盘⽂件进⾏操作时,可以⼀次从⽂件中读出⼤量的数据到缓冲区中,以后对这部分的访问就不需要再使⽤系统调⽤了,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作⼤⼤快于对磁盘的操作,故应⽤缓冲区可⼤⼤提⾼计算机的运⾏速度。

3.缓冲区究竟是什么?

缓冲区有语言级缓冲区和内核级缓冲区

我们口中的缓冲区主要指的是语言级缓冲区

每个文件都有自己的缓冲区,其实就是字符串指针

以printf为例,要向屏幕打印东西,则需要打开stdout文件,打开stdout文件会返回一个FILE类型的指针,FILE中就包含了fd,缓冲区等,调用printf函数,则向stdout的缓冲区内拷贝数据,当满足一定条件时,则会调用系统调用接口,将缓冲区的内容交给OS进行对屏幕文件的操作,同时该文件清空自己的缓冲区。

我们谈到的一定条件是什么呢?

1.强制刷新(flush)

2.刷新条件满足

a.立即刷新 -- 无缓冲 -- 写透模式(WT ->write throw)

b.满了 -- 全缓冲

c.行刷新 -- 行缓冲

3.进程退出

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 8:13:44

二、Visual Studio 2026如何创建C语言项目

1.打开软件2.创建新项目3.下一步4.创建5.添加源文件(1)新建项(2)显示所有模板(3)添加C语言源文件后缀名为.c6.添加头文件(1)新建项(2)显示所有模板&#xff0…

作者头像 李华
网站建设 2026/8/29 23:34:13

Java二叉树:原理、实现与实战

深入浅出Java二叉树:原理、实现与实战 一、二叉树核心概念深度解析 1. 二叉树的定义与分类 二叉树是一种每个节点最多有2个子节点的树状结构,子节点分为左子节点(lChild)和右子节点(rChild)。根据节点分布规…

作者头像 李华
网站建设 2026/8/30 4:45:18

动态规划(四)算法设计与分析 国科大

0-1背包问题输入:给定物品集合 ,每个物品 i 对应重量 和价值;同时给定背包的总重量限制 W。输出:选择物品的一个子集,满足 “子集总重量不超过 W” 的约束,同时最大化子集的总价值。这是一个二元决策问题&a…

作者头像 李华
网站建设 2026/8/29 22:08:39

为什么90%的团队搞不定云原生Agent部署?Docker批量方案深度拆解

第一章:云原生Agent部署的现状与挑战随着云原生技术的快速发展,Agent作为实现可观测性、自动化运维和安全监控的核心组件,被广泛部署于Kubernetes集群、边缘节点及混合云环境中。这些轻量级代理程序负责采集指标、日志和追踪数据,…

作者头像 李华
网站建设 2026/8/30 11:33:36

2025年为何越来越多的程序员都转行网络安全?难道发展前景更好?

2025年为何越来越多的程序员都转行网络安全?难道发展前景更好? 为何越来越多的程序员纷纷转行网络安全? 其实黑客都是程序员,但是并不是所有的程序员都是黑客. 从企业和社会需求来看,现在真不缺程序猿 ,反…

作者头像 李华
网站建设 2026/8/30 3:31:23

统信域管域用户在加域计算机中的组

统信域管域用户在加域计算机中会自动创建与用户名相同的组,并且域用户会同时在dialout、disk、sambashare、vboxusers、netdev、scanner、lpadmin、users、sudo、udcp、lp组中test2:x:10093:test2 dialout:x:20:test,test2 disk:x:6:test,test2 sambashare:x:998:te…

作者头像 李华