Linux中如何理解一切皆文件

ops/2024/10/24 7:44:13/

根据之前的学习我们会有一些少许的疑惑,我们的stdin ,stdout,stderr访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是外设,那么这些外设是怎么被看成是文件的呢?

看图可以知道硬件的上一层链接着一个驱动程序,操作系统通过构建一个struct device 的结构体来描述这一类的外设:

然后每个外设都有一个device这样的结构体对象,操作系统通过链表把这些device连接起来:所以操作系统对设备的管理转化成了对数据结构的增删查改:

然后device中的属性则是由外设的驱动来初始化:

这样将外设结合起来,可以看到他们的属性类别都是一样的,值可以不同,但是IO的方法是不同的,读键盘就是读键盘,读显示器就是读显示器,他们没有任何关系

我们拿键盘举例子,键盘目前只有读取方法,但是没有写方法,往键盘里写东西感觉都是不太对的,所以把写键盘设置为空方法,其他的类推:

可以看到,他们的方法虽然不一样,但是他们都需要有读写,所以在操作系统启动的时候就会创建struct file对象,里面包含了相关文件相关属性等等我们不关心,重点是file里含有两个函数指针,那两个函数指针分别指向外设的read和write方法:

可以看到用函数指针屏蔽了文件硬件的差异

从file的角度来看我们要读写外设,我们就不关心下面的蓝色字体实现的方法,然后从file的角度往上看,我们访问外设,就只关心外设的读和写,甚至不用关系底层的设备是什么,file会自动帮我们找到对应的设备读写。

所以,相当于在操作系统中对外设做了一层封装,让我们看到的一切皆文件:

这一套机制在Linux当中叫vfs(虚拟文件系统)

其中实现这一机制就类似于c++中多态:

之不过c面向过程写的方式不一样。

所以系统是通过什么方式来让我们看到struct file的呢?是通过文件描述符来让进程看到struct file的


http://www.ppmy.cn/ops/128040.html

相关文章

TCP 协议学习

一、引言 在当今的网络通信世界中,TCP(Transmission Control Protocol,传输控制协议)是最为重要的协议之一。它为各种网络应用提供了可靠的、有序的数据传输服务,是互联网通信的基石。无论是网页浏览、电子邮件发送、…

万户ezEIP企业管理系统 productlist.aspx SQL注入漏洞复现

0x01 产品描述: 万户协同办公平台 ezEIP 是一个综合信息基础应用平台。系统完善的用户、权限、角色、对象多层分离权限管理体系,实现分站点、分栏目、分对象的分权管理体系,将站点维护工作分担到各职能部门各岗位。系统管理员负责系统基础设置…

【使用Flask构建RESTful API】从零开始开发简单的Web服务!

使用Flask构建RESTful API:从零开始开发简单的Web服务 引言 随着Web应用程序的广泛使用,RESTful API已成为现代Web服务的核心技术之一。通过RESTful API,我们可以轻松地创建、读取、更新和删除(CRUD)数据&#xff0c…

使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段

ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时,指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解(如 ExcelProperty)标注的字段会被处理和导出。 作用 简化导出过程:只导出需要的字…

CAXA制造工程师2024软件下载

CAXA制造工程师2024软件和补丁文件下载 2024 SP0版本包括多项新增功能和改进: https://pan.baidu.com/s/1vtaGTSgFwotqDZM0NS8Nlw?pwd2024 一、制造工程师 CAD 平台升级到实体设计 2024 制造工程师 CAD 平台基于实体设计 2024 平台,将实体设计新增功能…

《YOLO目标检测》—— YOLOv1 详细介绍

文章目录 一、算法特点二、网络结构三、检测过程四、损失函数五、性能表现六、优缺点 YOLO v1(You Only Look Once version 1)是一种快速的目标检测算法,以下是对YOLO v1的详细介绍: 一、算法特点 端到端的网络结构:Y…

社区团购在一线城市的新机遇:定制开发小程序助力用户细分

摘要:本文深入探讨社区团购在一线城市的发展现状与挑战,强调通过对用户的精准细分而非品类细分来挖掘市场潜力。引入“定制开发 AI 智能名片 21 链动模式 S2B2C 商城小程序”这一创新元素,详细阐述其在社区团购用户细分及平台活力提升方面的重…

基于SpringBoot+Vue+uniapp的C语言在线评测系统的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…