【Linux课程学习】:文件第二弹---理解一切皆文件,缓存区
🎁个人主页:我们的五年
🔍系列专栏:Linux课程学习
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
Linux学习笔记:
https://blog.csdn.net/djdjiejsn/category_12669243.html
前言:
在本篇文章中,站在操作系统的角度看待文件,对于文件,操作系统会进行怎么样的处理。重定向,缓冲区(语言级,内核级)。
目录
本篇重点知识点:
一.理解一切皆文件
1.1先描述,再组织
1.1.1那么管理外设,是怎么管理的呢?------先描述,再组织
1.1.2描述的结构体中,有对应的操作方法
1.2在进程角度,一切皆文件
二.文本写入和二进制文件
2.1为什么要有printf这样的函数?
2.2伟大的C语言
三.内核级缓冲区
3.1他们是如何提高效率的呢?
3.2如何看待内核级缓冲区?
3.3如何让内核级缓冲区进行刷新?
3.4如何读取,修改文件?
3.5内存块
本篇重点知识点:
1.语言级的缓冲区设计的目的是减少系统调用,以提高效率。内核级的缓冲区是为了减少与外设的交流,提高效率。这两个设计都是为了提高效率。
2.理解外部设备对于进程而言也是文件。struct file中会有操作符表(函数指针的集合),它可以屏蔽不同设备直接的操作方法。也相当于文件。理解刷新,写入缓冲区本质是拷贝。
3.
一.理解一切皆文件
其他的文件对于进程而言是文件,这个点很好理解。但是外部设备,比如键盘,显示器,网卡……,这些外设对于进程而言也是文件,这该如何理解呢?
1.1先描述,再组织
操作系统OS对下要管理外设,对上要提供对应的接口,让用户进行操作。在系统调用这个层面,又给我封装了语言层的函数。fopen,fclose……
1.1.1那么管理外设,是怎么管理的呢?------先描述,再组织
对外部设备的描述,会定义一个结构体,里面包含这外设的类型,工作状态,id值,还有其他很多的属性。-----这样对设备进行了描述。
每一个设备都会有结构体描述起来,他们的大方向是差不多的,有很多对应的属性,比如名称。只是他们的值不一样。每个设备会串在一个链表中,那么到后面,我们对设备的管理,就到了对链表的增删查改。
每一个外设,都有自己的驱动程序,是提供设备的厂商给我们提供的。
1.1.2描述的结构体中,有对应的操作方法
Linux系统是C语言写的,C语言结构体中,不能封装方向,那么它是怎么控制对应的设备进行运作的呢?C语言中可以封装函数指针。
比如键盘有写入的函数,输出的函数。显示器也有输入的函数,也有输出的函数。但是对应键盘来说,输入函数是没有意义的,所以就设置为空。对于显示器来说,输入函数是无效的,所以也设置为空。所以这样就能保证能共用一套结构体结构。后面操作系统要进行对应的操作,也可以统一。
1.2在进程角度,一切皆文件
VFS(virtual File System Switch):虚拟文件系统。
对于普通的文件,有对应的文件描述:struct file。里面包含文件的属性和方法。但是从上面来看,底层在进行处理以后,也是有struct file,里面包含这属性和方法,让不同的设备一同样的方式描述起来,这就和文件一样了。所以外部设备也可以理解为文件了。
我们的所以行为,全部都会被转换为进程。当进程找到对应的文件,就可以有对应的方法,该可以调用函数进行执行了。
多个设备提供的方法就是多态。
二.文本写入和二进制文件
显示器是字符设备,我们输出1234(一千两百三十四),其实是在显式器上输出了‘1’字符,‘2’字符,‘3’字符,‘4’字符。
2.1为什么要有printf这样的函数?
对于write系统调用而言,它要输出的字符串是void*类型的,它没有所谓的文本和二进制。那为什么我们还要去printf指明所对应的类型呢,比如要打印整数,我们在printf中写%d,打印浮点数%f。就能直接打印,不然直接用write时,我们先要把整数转化为字符串,才能打印。
所以printf是方便了我们用户的。
在底层是不区分文件文件和二进制文件的。字符其实有对应的ACSII码,是一个一个的二进制数字表示的字符。所以只有二进制文件。
2.2伟大的C语言
不同系统的系统调用会不一样,但是我们在写代码的时候,在不同的平台基本没有变化。不同的操作系统的底层接口是不一样的,C语言帮我们封装以后,让我们不要去担心底层,C语言在不同操作系统会有不同的处理。
提高代码的可移植性。
C语言的库:
一款语言,会实现不同操作系统的兼容,不同的操作系统的底层实现是不一样的。所以就有了语言的可移植性。这也是为了增加用户群体。
三.内核级缓冲区
在操作系统有内核级缓冲区,在语言级有语言级的缓冲区。他们两个是不同的,但是他们两个的实现的目的就是为了提高效率。
3.1他们是如何提高效率的呢?
如果每个我们每次输出都进行一次output,就会有很大的成本,他们一般设置的是行刷新,或者是当缓冲区满的时候,再刷新(fflush)。
对于显示器这样的特殊设备,一般用的是行刷新,即遇到换行就会刷新。对于其他的文件,那么可能就是当缓冲区满的时候,才会进行刷新。
3.2如何看待内核级缓冲区?
当我们调用write接口对于文件进行写入时,不是直接写到文件,而是写到文件的缓冲区。具体多久写到文件中,由操作系统决定。所以不是每使用一次write,就会进行一次IO。而是有几次,当缓冲区中的内容到达一定的数量时,才进行刷新。
语言级的缓存区差不多也是这样的设计。当我们使用printf时,不会直接把我们输出的内容直接输出到内核级缓冲区。而是把要输出的内容拷贝到FILE结构体的buf数组中。在满足一定条件的时候,才会把buf数组中的调用系统调用接口,把FILE结构体中的内容拷贝到内核级缓冲区。
内核级缓冲区多久进行IO,由操作系统决定。
3.3如何让内核级缓冲区进行刷新?
#include <unistd.h>
int fsync(int fd);
int fdatasync(int fd);
fd是文件描述符。要进行写入,这个文件肯定被打开,被打开,就肯定在文件描述符表中,fd就表示的是文件描述符表的下标。
3.4如何读取,修改文件?
上面所说的是写入,读取就是相反的过程。而修改就包含了读入和修改。
读取就包含了打开文件(如何找到文件,磁盘中的文件时如何,是文件系统的内容,在后面的文件,会进行讲解),把文件的内容加载到缓冲中,然后上层从缓冲中读取,这就形成了读取。
而修改就是先读取,然后把指定的内容进行修改以后,再进行写入就可以了。
3.5内存块
缓冲区是有内存块组成的,内存块一般是4KB。
相关文章:
【Linux课程学习】:文件第二弹---理解一切皆文件,缓存区
🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux学习笔记: https://blog.csdn.net/d…...
浅谈CI持续集成
1.什么是持续集成 持续集成(Continuous Integration)(CI)是一种软件开发实践,团队成员频繁地将他们的工作成果集成到一起(通常每人每天至少提交一次,这样每天就会有多次集成),并且在每次提交后…...
微信创建小程序码 - 数量不受限制
获取小程序码:小程序码为圆图,且不受数量限制。 目录 文档 接口地址 请求方式 功能描述 注意事项 获取 scene 值 请求参数 返回参数 对接 请求方法 获取小程序码 调用获取小程序码 总结 文档 接口地址 https://api.weixin.qq.com/wxa/get…...
基于 Elasticsearch Completion Suggester 实现高效搜索智能提示
1. 引言 在现代搜索引擎中,搜索智能提示已成为提升用户体验的重要功能之一。无论是电商网站、内容管理平台,还是社交媒体应用,智能提示都能帮助用户快速输入关键字、发现相关内容,并减少拼写错误带来的困扰。 1.1 什么是搜索智能…...
框架建设实战1——创建frame-parent
结合框架的结构,首先我们创建所以使用框架的parent,用以自顶向下的框架组件管理。 本框架基于maven进行依赖管理。具体步骤如下: 1.创建一个module 创建一个maven工程。命名为frame-parent。只有一个pom文件。文件内容主要包含:…...
Qt 安装Qt Serial Port
最近要用Qt写个串口上位机软件,发现Qt的串口库用不了,上网找了一下资料,找到一种解决办法,具体操作如下: 参考文章:https 目录 一、找到QT安装路径,并运行Qt Maintenance Tool二、选择 添加或移…...
GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...
Vue Web开发(一)
1. 环境配置 1.1. 开发工具下载 1.1.1. HbuilderX 官网地址:https://uniapp.dcloud.net.cn/ 1.1.2. Visual Studio Code 官网地址:https://code.visualstudio.com/Download 1.1.3. Node环境 官网地址:https://nodejs.cn/ 正常软件安装…...
帮我写一篇关于AI搜索网页上编写的文章是否存在版权问题的文章, 字数在 3000 字左右。文心一言提问, 记录后用.
AI搜索网页上编写的文章是否存在版权问题? 在当今科技飞速发展的时代,AI搜索工具如雨后春笋般涌现,为人们获取信息提供了极大的便利。然而,随之而来的问题是,AI搜索案例中常常出现很多内容缺乏依据,这引发…...
物联网智能项目如何实现设备高效互联与数据处理?
一、硬件(Hardware) 设备互联的基础,涵盖传感器、执行器、网关和边缘计算设备。 传感器与执行器 功能: 采集环境数据(如温度、湿度、运动等)并执行控制命令。优化方向: 低功耗、高精度传感器以…...
《地球化学》
《地球化学》主要报道近代地球化学, 特别是其主要分支学科, 如岩石地球化学、元素地球化学、有机地球化学、环境地球化学、矿床地球化学、实验地球化学、生物地球化学、天体化学、计算地球化学、分析地球化学、海洋地球化学、沉积地球化学、纳米地球化学、油气地球化学和同位素…...
UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets
插件名称:UPIrregularWidgets 插件包含以下功能 你可以点击任何图片,而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能,复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…...
南京邮电大学《2024年812自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《南京邮电大学812自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...
LobeChat-46.6k星!顶级AI工具集,一键部署,界面美观易用,ApiSmart 是你肉身体验学习LLM 最好IDEA 工具
LobeChat LobeChat的开源,把AI功能集合到一起,真的太爽了。 我第一次发现LobeChat的时候,就是看到那炫酷的页面,这么强的前端真的是在秀肌肉啊! 看下它的官网,整个网站的动效简直闪瞎我! GitH…...
期权懂|场内个股期权开户流程有哪些?
期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 场内个股期权开户流程有哪些? 场内个股期权开户第一步开户: 投资者首先需要在具有期权交易资格的证券公司开立期权账户。 场内个股期权开户第二步选…...
解决python 使用pip 安装模块时遇到的错误SSL: CERTIFICATE_VERIFY_FAILED
最近有一个使用python 2.7.* 使用requests模块的需求,在安装的过程中遇到了一个问题,在这里分享给大家! 安装requests命令如下 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests 遗憾的是,报错了 Collecting requests …...
智慧银行反欺诈大数据管控平台方案(四)
智慧银行反欺诈大数据管控平台的核心内容,是通过整合多维度、多层次的金融交易信息,利用先进的大数据分析、机器学习与人工智能算法,构建一个系统性、实时性和智能化的反欺诈管控网络,旨在提供全面、高效、精准的风险评估机制。该…...
前端项目开发 如何解决 error ‘val‘ is not defined no-undef 问题?
在前端开发中,error val is not defined no-undef 是 ESLint 报出的错误,表示在代码中使用了未定义的变量 val,但是 ESLint 没有找到它的声明。为了解决这个问题,通常有以下几种方法: 1. 检查变量是否正确声明 最常见…...
C++面试突破---C/C++基础
1.C特点 1. C在C语言基础上引入了面对对象的机制,同时也兼容C语言。 2. C有三大特性(1)封装。(2)继承。(3)多态; 3. C语言编写出的程序结构清晰、易于扩充,程序可读性好。…...
【Vue】Scoped、组件间通信、Props检验
目录 Scoped 作用 *原理 组件通信 前置知识 什么是组件通信 为什么需要组件通信 如何进行组件通信 如何辨别两个组件的关系 父子组件通信 父传子 子传父 非父子组件通信 祖先传后代 语法 任意两个组件通信 步骤 Props校验 props是什么 作用 语法 组件的…...
2022 年 9 月青少年软编等考 C 语言三级真题解析
目录 T1. 课程冲突T2. 42 点思路分析T3. 最长下坡思路分析T4. 吃糖果思路分析T5. 放苹果思路分析T1. 课程冲突 此题为 2021 年 9 月三级第一题原题,见 2021 年 9 月青少年软编等考 C 语言三级真题解析中的 T1。 T2. 42 点 42 42 42 是: 组合数学上的第 5 5 5 个卡特兰数字…...
遗传算法与深度学习实战(26)——编码卷积神经网络架构
遗传算法与深度学习实战(26)——编码卷积神经网络架构 0. 前言1. EvoCNN 原理1.1 工作原理1.2 基因编码 2. 编码卷积神经网络架构小结系列链接 0. 前言 我们已经学习了如何构建卷积神经网络 (Convolutional Neural Network, CNN),在本节中&a…...
Svn如何切换删除账号
记录Svn清除切换账号 1.首先打开小乌龟的设置如下图 打开设置后单击已保存数据,然后选择清除 接上图选择清除后,就可以打勾选择清除已保存的账号,我们再次检出的就可以切换账号了 👉总结 本次记录Svn清除切换账号 如能帮助到你…...
重生之我在异世界学编程之C语言:选择结构与循环结构篇
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、选择结构1. if语句2. else i…...
React第十二节组件之间通讯之发布订阅模式(使用pubsub-js插件)
组件之间通讯常用方案 1、通过props 2、通过context 3、通过发布订阅模式 4、通过Redux 后面会有专栏介绍 1、安装 pubsub-js 插件 yarn add pubsub-js 常用的事件 a、发布事件:传入一个自定义事件名称(name),以及要发布的消息内…...
同为科技(TOWE)柔性定制化PDU插座
随着科技的进步,越来越多的精密电子设备,成为工作生活密不可分的工具。 电子电气设备的用电环境也变得更为复杂,所以安全稳定的供电是电子电气设备的生命线。 插座插排作为电子电气设备最后十米范围内供配电最终核心部分,便捷、安…...
【机器学习】机器学习的基本分类-监督学习-决策树-C4.5 算法
C4.5 是由 Ross Quinlan 提出的决策树算法,是对 ID3 算法的改进版本。它在 ID3 的基础上,解决了以下问题: 处理连续型数据:支持连续型特征,能够通过划分点将连续特征离散化。处理缺失值:能够在特征值缺失的…...
代码随想录第36天
01背包问题 二维 def hanshu():wupin, bagweight [int(x) for x in input().split()]weight [int(x) for x in input().split()]value [int(x) for x in input().split()]dp [[0]*(bagweight1) for i in range(wupin)] #dp[i][j]代表从物品【0,i-1】让任意取,…...
折叠屏手机拐点:三星领跌,华为小米逆势增长
科技新知 原创作者丨依蔓 编辑丨蕨影 折叠屏手机不香了?显示器出货量罕见下滑,并预计 2025 年仍将持续下降。 近日,市场调查机构 DSCC报告称, 2019 年至 2023 年,折叠屏市场曾保持每年至少 40% 的高速增长。然而&…...
微服务的负载均衡可以通过哪些组件实现
微服务的负载均衡可以通过多种组件来实现,以下是一些常见的负载均衡组件及其特点: Nginx: Nginx是一款轻量级的HTTP和反向代理服务器,也是一个高性能的负载均衡器。它支持多种负载均衡算法,如轮询、加权轮询、IP哈希等…...
uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(2)
接uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(1), 在main.js中 import App from ./App// #ifndef VUE3 import Vue from vue import ./uni.promisify.adap…...
算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合
全排列的简要总结 全排列(Permutation)是数学中一个经典的问题,指的是从一组元素中,将所有元素按任意顺序排列形成的所有可能序列。 特点 输入条件: 给定一组互异的元素(通常为数组或字符串)。…...
flink-connector-mysql-cdc:02 mysql-cdc高级扩展
flink-connector-mysql-cdc:01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本:3.2.0flink版本…...
四、自然语言处理_02RNN基础知识笔记
1、RNN的定义 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络架构,它与传统的前馈神经网络(Feedforward Neural Network)不同,主要区别在于它能够处理输入数…...
《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答 问:《船舶物资与市场》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《船舶物资与市场》级别? 答:国家级。主管单位:中国船舶集团有限公司 主办单…...
【工具变量】上市公司企业所在地城市等级直辖市、副省级城市、省会城市 计划单列市(2005-2022年)
一、包含指标: 股票代码 股票代码 股票简称 年份 所属城市 直辖市:企业所在地是否属于直辖市。1是,0否。 副省级城市:企业所在地是否属于副省级城市。1是,0否。 省会城市&a…...
websocket通信
“WebSocket 允许客户端和服务器在连接建立后随时互相发送数据,而无需每次交互都重新建立连接。”我想请问,第一次前端往后端发送数据时,传递的数据应该满足接口的参数内容,在第一次建立连接后之后的数据传递还是要满足接口的参数…...
数据结构——单调队列
这篇博客我们来讨论一下单调队列的问题,其实和之前学的单调栈都是一种上通过改变操作来解决问题的一种数据结构 我们先来回忆一下单调栈的内容,这样方便将其和单调队列做区分 单调栈:(单调性从栈底到栈顶) 1.单调栈是一种栈数据…...
qt环境 C11thread子线程关闭定时器问题
环境情况:使用的是thread c11线程和qt的定时器 报错: QObject::~QObject: Timers cannot be stopped from another thread 主要原因: 1.开启了一个事件循环线程处理消息类型,但是有一种消息类型需要关闭资源,这就导…...
深入浅出:虚拟化技术及其在现代 IT 中的应用
文章目录 虚拟化的定义与基本原理虚拟机监控程序(Hypervisor) 虚拟化的历史与发展虚拟化的实现方式虚拟化的优势1. 提高资源利用率2. 降低成本3. 提升灵活性和可扩展性4. 加快应用部署和迁移5. 提高安全性和隔离性 不同类型虚拟化技术服务器虚拟化实际应…...
Golang内存模型总结1(mspan、mcache、mcentral、mheap)
1.内存模型 1.1 操作系统存储模型 从上到下分别是寄存器、高速缓存、内存、磁盘,其中越往上速度越快,空间越小,价格越高。 关键词是多级模型和动态切换 1.2 虚拟内存与物理内存 虚拟内存是一种内存管理技术,允许计算机使用比…...
优先算法 —— 滑动窗口系列 - 无重复字符的最长子串
目录 前言 1. 无重复字符的最长子串 2. 题目解析 3. 算法原理 解法1:暴力枚举 哈希表(判断字符是否有重复出现) 解法2:滑动窗口 4. 代码 前言 当我们发现暴力解法两个指针都不回退,都是向同一个方向移动的时候我…...
Python 浏览器自动化新利器:DrissionPage,让网页操作更简单!
Python 浏览器自动化新利器:DrissionPage,让网页操作更简单! 文章目录 Python 浏览器自动化新利器:DrissionPage,让网页操作更简单!🚀 引言🌟 DrissionPage简介🛠️ 三大…...
[Python] 进阶之路:模块、包和异常处理
在掌握了Python的类与对象后,下一步是深入理解模块化开发和异常处理。模块与包帮助我们组织代码,增强代码的可维护性和重用性,而异常处理则是编写健壮代码的重要技能。本文将系统讲解Python中模块、包和异常处理的核心概念与实用技巧。 一、模…...
SpringBoot 整合 Avro 与 Kafka 详解
SpringBoot 整合 Avro 与 Kafka 详解 在大数据处理和实时数据流场景中,Apache Kafka 和 Apache Avro 是两个非常重要的工具。Kafka 作为一个分布式流处理平台,能够高效地处理大量数据,而 Avro 则是一个用于序列化数据的紧凑、快速的二进制数…...
windows C#-使用 Override 和 New 关键字(上)
在 C# 中,派生类中的方法可具有与基类中的方法相同的名称。 可使用 new 和 override 关键字指定方法的交互方式。 override 修饰符用于扩展基类 virtual 方法,而 new 修饰符用于隐藏可访问的基类方法 。 在控制台应用程序中,声明以下两个类…...
FaRM译文
No compromises: distributed transactions with consistency, availability, and performance Aleksandar Dragojevic, Dushyanth Narayanan, Edmund B. Nightingale, Matthew Renzelmann, Alex Shamis, Anirudh Badam, Miguel Castro Microsoft Research 摘要 具有强一致…...
大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
大数据项目-Django基于聚类算法实现的房屋售房数据分析及可视化系统
《[含文档PPT源码等]精品Django基于聚类算法实现的房屋售房数据分析及可视化系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程课程答疑等! 数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog 后台管理系统涉及技术: 后台使…...
当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大
问: 当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大 回答: 这时候我们就不能写死六个小的div的高度,否则上下的小的div的间距就会变大,因为他们的高度…...