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

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.mrgr.cn/news/57230.html

相关文章:

  • QExcel 保存数据 (QtXlsxWriter库 编译)
  • Python装饰器工具类
  • 初始JavaEE篇——多线程(2):join的用法、线程安全问题
  • 自动化测试实施过程中需要考虑的因素!
  • Jmeter 实战 JDBC配置
  • react的state是一张快照
  • Python包——Matplotlib
  • 各种数据类型的定义与常规计算
  • 第23周Java主流框架入门-SpringMVC 3.拦截器
  • 【单元测试】深入解剖单元测试的思维逻辑
  • 【论文速看】DL最新进展20241023-多模态、无监督学习、多任务、图像修复
  • 【哈工大_操作系统实验】Lab8 终端设备的控制
  • 买华为系的车,这个理由无法拒绝
  • hass docker openwrt配置
  • 软件分享丨PDF Shaper
  • 不错的二次元个人导航页源码
  • 从新手到高手:map和set的使用技巧全攻略(C++)
  • 重学SpringBoot3-集成Hazelcast
  • 微服务-nacos
  • 掘金.计算位置 x 到 y 的最少步数(简单01)
  • 面试总结分享:25道数据库测试题
  • Vue01
  • leetcode hot100【LeetCode 49. 字母异位词分组】java实现
  • ScheduledThreadPoolExecutor的源码剖析
  • Visual Studio2022 Profile 工具使用
  • netty之ChannelPipeline和ChannelHandler