当前位置: 首页 > article >正文

Linux中如何理解一切皆文件

根据之前的学习我们会有一些少许的疑惑,我们的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.kler.cn/news/362345.html

相关文章:

  • 拼多多详情API接口的获取与应用
  • 如何开启华为交换机 http
  • 如何通过 Service Mesh 构建高效、安全的微服务系统
  • 060_基于python智能旅游系统
  • pandas 数据分析实战
  • Dockerfile和docker-compose详解
  • 【YOLO模型】(1)--YOLO是什么
  • Android 13 SPRD 如何临时修改 Android 系统版本
  • 开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现离线推理-Tools助力(二)
  • w~自动驾驶合集9
  • RHCE笔记-SSH服务
  • 毕业设计项目系统:基于Springboot框架的网上订餐管理系统,完整源代码+数据库+毕设文档+部署说明
  • Spring Cloud --- Sentinel 授权规则
  • StarTowerChain:开启去中心化创新篇章
  • gitlab-cli无法构建流水线
  • 数据结构 - 树,初探
  • 最好的ppt模板网站是哪个?做PPT不可错过的18个网站!
  • 记录一个容易混淆的 Spring Boot 项目配置文件问题
  • 监控易-某信息化系统监控-监测点详情解读
  • Java学习教程,从入门到精通,Java 基本数据类型(7)
  • 【VUE】v-show 和 v-if 的区别
  • 11. 事件机制
  • FFmpeg源码:av_malloc_array、av_realloc_array函数分析
  • Go_Parser部署、使用与原理分析
  • DOIP协议介绍-1
  • LeetCode 3185. 构成整天的下标对数目 II