34 | 仓库管理:如何实现文件的六大基本操作?
LMOS
该思维导图由 AI 生成,仅供参考
你好,我是 LMOS。
我们在上一节课中,已经建立了仓库,并对仓库进行了划分,就是文件系统的格式化。有了仓库就需要往里面存取东西,对于我们的仓库来说,就是存取应用程序的文件。
所以今天我们要给仓库增加一些相关的操作,这些操作主要用于新建、打开、关闭、读写文件,它们也是文件系统的标准功能,自然即使我们这个最小的文件系统,也必须要支持。
辅助操作
通过上一节课的学习,我们了解了文件系统格式化操作,不难发现文件系统格式化并不复杂,但是它们需要大量的辅助函数。同样的,完成文件相关的操作,我们也需要大量的辅助函数。为了让你更加清楚每个实现细节,这里我们先来实现文件操作相关的辅助函数。
操作根目录文件
根据我们文件系统的设计,不管是新建、删除、打开一个文件,首先都要找到与该文件对应的 rfsdir_t 结构。
在我们的文件系统中,一个文件的 rfsdir_t 结构就储存在根目录文件中,所以想要读取文件对应的 rfsdir_t 结构,首先就要获取和释放根目录文件。
下面我们来实现获取和释放根目录文件的函数,代码如下所示。
上述代码中,get_rootdir 函数的作用就是读取文件系统超级块中 rfsdir_t 结构到一个缓冲区中,del_rootdir 函数则是用来释放这个缓冲区,其代码非常简单,我已经帮你写好了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了仓库管理中文件的六大基本操作,包括新建、删除、打开、读写文件等。文章首先介绍了文件操作相关的辅助函数,如获取和释放根目录文件的函数,以及获取文件名和判断文件是否存在的函数。接着详细讲解了这些辅助函数的实现细节和功能。在文件相关的操作方面,文章提到了新建、删除、打开、读写以及关闭文件等基本功能的实现。通过对这些操作的介绍,读者可以了解文件系统的基本功能和实现原理。文章还重点介绍了新建文件和删除文件的操作方法和实现细节,包括从文件路径名中提取纯文件名、分配逻辑储存块、初始化文件对应的结构等步骤。文章内容涵盖了文件系统的基本操作,为读者提供了深入了解文件管理的基础知识。文章通过代码实现了打开文件的操作流程,包括从文件路径提取文件名、获取根目录文件、分配缓存区、读取文件对应的逻辑储存块等步骤。通过详细的代码解析,读者可以深入了解文件打开操作的实现原理。文章还介绍了读取文件和写入文件的操作流程,以及关闭文件的操作,为读者提供了全面的文件管理操作指南。文章最后通过串联整合文件系统设备驱动程序,使读者能够了解文件相关操作在实际系统中的应用。文章内容丰富,通过实例代码和详细解释,读者可以全面了解文件系统的基本操作和实现原理。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》,新⼈⾸单¥68
《操作系统实战 45 讲》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(9)
- 最新
- 精选
- neohope置顶四、文件系统使用【1、只有一级目录;2、文件管理结构+文件大小<=4K】 1、判断文件是否存在 计算得到文件名 找到根目录文件块 跳过管理结构,遍历全部rfsdir_t目录结构,如果有重名的就返回,没有就失败 2、新建文件 A、确认文件并不存在,存在就报错 B、找到根目录文件块 C、申请一个逻辑块 D、跳过管理结构,新增一个rfsdir_t目录结构,并指向新申请的逻辑块 E、在逻辑块开始建立新的fimgrhd_t文件管理结构 3、删除文件 A、找到根目录文件快 B、跳过管理结构,遍历全部rfsdir_t目录结构,如果没有就失败 C、将rfsdir_t标识为删除 D、回收逻辑块 4、打开文件 A、找到根目录文件快 B、跳过管理结构,遍历全部rfsdir_t目录结构,如果没有就失败 C、读取逻辑块,返回 5、读取文件 A、判断文件已打开 B、根据文件偏移及读取长度,返回数据 6、写入文件 A、判断文件已打开 B、数据追加到缓存中 C、缓存写入到设备中 7、关闭设备 A、判断文件已打开 B、缓存写入到设备中 C、释放缓存
作者回复: 总结到位
2021-08-074 - pedro限制1:不可持久化,不支持crash恢复,应加入磁盘块的写入,内存中有一定文件块的缓存,支持日志,防止系统崩溃,文件数据丢失。 限制2:缺少抽象层,无法支持多种格式的文件。 限制3:小量内存式文件系统,没有使用磁盘,不支持 mount 等骚操作。 等等……
作者回复: 哈哈是的,你有能力可以写个硬盘驱动,在rfs这个驱动中,将IO包继续下发给硬盘驱动,让硬盘驱动写入到硬盘,由此,有层层驱动堆叠的IO栈就形成了
2021-07-263 - LDxy好像还缺少seek操作
作者回复: 对,没有实现
2021-07-262 - Kinco.1. 不支持多种格式的文件; 2. 不支持多层目录; 3. 不支持seek操作。
作者回复: 是的 是的
2021-10-201 - 艾恩凝打卡,果然不支持多级目录,更多的是体会一下,os中的文件操作
作者回复: 是的 支持多级 目录 代码会更加复杂
2022-05-12 - MONKEYG我想请问下,这个try_entry是谁在调用的😂😂
作者回复: 没有这个函数啊
2022-05-07 - ifelse文件查询
作者回复: 嗯嗯
2022-02-22 - kocgockohgoh王裒请问删除文件的时候 是不是在根目录文件产生空洞啊 新建文件总是从根目录文件末尾操作
作者回复: 是的
2022-01-06 - al_培龙好像不支持多级目录吧
作者回复: 对 对 对
2021-08-032
收起评论