1. 主页
  2. 自己动手从0到1学写FAT32文件系统
  3. 第3章 文件操作
  4. 实现文件的扩容写入

实现文件的扩容写入

内容纲要

本课时的主要目的是提供一个文件数据的扩容写入。由于实现过程略复杂,所以实际分了两个小视频来介绍。

主要内容

文件大小扩容原理

所谓的扩容,即扩大文件的大小,用于解决有时写入的位置已经位于文件的末端,还需要继续往下写的情况。此时,就需要将文件的大小扩大,如下图所求。

为实现文件扩容,需要考虑增大多少。有两种情况:

  • 增大不多,用现有的簇链即可。此时无需做特别处理
  • 增大较多,必须扩大簇链来存储新数据。需要从FAT表中寻找空闲簇,链接到文件的簇链中。

查找空闲簇的方式为从FAT表中找表项值为0的单元,表项的序号即为找到的空闲簇的簇号。

查找到之后,以文件簇链的最后簇号为索引,找到相应的FAT表项,向相应的表项写入找到的空闲簇号值。

注意,还要将找到的空闲簇对应的FAT表项值设置为EOC(簇链结束标记)值。

更新文件大小

除了更新簇链,还需要更新diritem中的filesize字段。更新方法较简单,只需要找到相应的diritem,修改,回写到设备上即可。

重点难点

本课时的难点在于allocate_free_cluster的实现。

目前这部分的代码实现,既简单也复杂。简单之处在于其大部分操作都是已经位于内存中的FAT表缓存中进行,不需要访问存储设备。难点在于其中的处理逻辑的理解。因为其中既涉及到空闲簇的查找,也涉及到空闲簇向已有簇链的追加。

注意事项

allocate_free_cluster中的代码,处理逻辑略复杂,且效率较大(回写FAT表部分)。在后面讲缓存的实现时,会对这部分代码进行重写,效率低的问题会被解决。

常见问题

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注