| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> OS管理文件的方式(文件读写的过程) -> 正文阅读 |
|
[系统运维]OS管理文件的方式(文件读写的过程) |
一个进程可以打开/创建多个文件,即 进程:打开的文件 = 1:n OS中存在多个进程,那就说明可能存在更多文件 所以,OS必须对进程中打开的文件进行管理 在了解文件如何被管理之前,我们需要先了解 文件是以何种形式存在于操作系统上的?? 目录 一、文件的存储方式1、文件的一般存储形式我们在平时看到的文件诸如 ?但是这只是Windows上表现出来的形式 ?这是Linux上文件的表现形式,通常这些文件是放在磁盘上的
所以!!!磁盘文件 = 文件内容 + 文件属性 2、文件的数据化存储形式一个文件包含文件内容和文件属性信息,这些信息都会被存放在一个结构体 struct file中 对于多个文件,就以双链表的形式相互联系起来 ?二、进程与struct file的关系文件这么多,哪些是属于当前进程的呢?? 进程的task_struct中包含一个 struct files来专门管理当前进程的文件(左图) struct files包含的指针数组 fd_array[ ]存放着各个文件的地址,通过这些地址我们可以找到对应的文件(右图) ? ? ? ? ??? ? ? ? 数组中存放着 struct file类型的指针,也就是 存放文件信息结构体struct file的地址 每一个地址都能对应到一个文件结构体 ? 三、文件描述符0、1、2在上一篇的系统调用函数中open函数的返回值是文件描述符 fd ? 每创建一个文件,就会对应一个文件描述符,这个文件描述符很容易让我们联想到数组的下标 没错,上面 指针数组的下标 = 文件描述符
既然stdout相当于显示器文件,那么我们直接向这个文件写入数据,是不是就会打印出来呢? 答案是 可以的!! ? 四、文件结构体struct file如何跟底层驱动打交道?键盘、显示器、磁盘、网卡等都属于外设,内存和这些外设打交道,无非就是I/O 为了和这些外设打交道,OS提供了系统调用函数read、write函数 (虽然键盘不能写,但是为了统一,键盘的write函数的函数体为空;显示器的read函数也是如此) ?
? 五、总结:文件读写的过程从上层到硬件,我们整理一下整个过程 假设上层调用了read函数
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:53:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |