php构建网站如何开始,广州软件园 网站建设,北京建设工程信息网人员库里的人怎么删除,深入浅出wordpress 中文根据之前的学习我们会有一些少许的疑惑#xff0c;我们的stdin #xff0c;stdout#xff0c;stderr访问的是键盘显示器#xff0c;然而键盘显示器等他们都有一个共同的特点就是他们都是外设#xff0c;那么这些外设是怎么被看成是文件的呢#xff1f; 看图可以知道硬件的…根据之前的学习我们会有一些少许的疑惑我们的stdin stdoutstderr访问的是键盘显示器然而键盘显示器等他们都有一个共同的特点就是他们都是外设那么这些外设是怎么被看成是文件的呢 看图可以知道硬件的上一层链接着一个驱动程序操作系统通过构建一个struct device 的结构体来描述这一类的外设 然后每个外设都有一个device这样的结构体对象操作系统通过链表把这些device连接起来所以操作系统对设备的管理转化成了对数据结构的增删查改
然后device中的属性则是由外设的驱动来初始化 这样将外设结合起来可以看到他们的属性类别都是一样的值可以不同但是IO的方法是不同的读键盘就是读键盘读显示器就是读显示器他们没有任何关系
我们拿键盘举例子键盘目前只有读取方法但是没有写方法往键盘里写东西感觉都是不太对的所以把写键盘设置为空方法其他的类推 可以看到他们的方法虽然不一样但是他们都需要有读写所以在操作系统启动的时候就会创建struct file对象里面包含了相关文件相关属性等等我们不关心重点是file里含有两个函数指针那两个函数指针分别指向外设的read和write方法 可以看到用函数指针屏蔽了文件硬件的差异
从file的角度来看我们要读写外设我们就不关心下面的蓝色字体实现的方法然后从file的角度往上看我们访问外设就只关心外设的读和写甚至不用关系底层的设备是什么file会自动帮我们找到对应的设备读写。
所以相当于在操作系统中对外设做了一层封装让我们看到的一切皆文件 这一套机制在Linux当中叫vfs虚拟文件系统
其中实现这一机制就类似于c中多态 之不过c面向过程写的方式不一样。
所以系统是通过什么方式来让我们看到struct file的呢是通过文件描述符来让进程看到struct file的