1. 主页
  2. 自己动手从0到1学写FAT32文件系统
  3. 第2章 FAT解析
  4. 建立XFAT结构

建立XFAT结构

内容纲要

主要内容

此课时内容较简单,不再赘述,略。

重点难点

以下说明仅针对C语言编程不熟练者。

围绕数据结构设计

本课时的主要目的是:创建一个结构体来表示一个FAT32分区。

我个人觉得这是代码设计中很重要的一个设计起点。对于初学C语言的同学来说,可能在设计代码解决问题时,首先想到的是针对某个问题设计一系列函数,然后再逐个实现这个函数。这个过程中可能会需要一些参数,有些会封装成结构体。这种方式是从基本功能设计出发。

而另一种则不同,即从数据结构的角度去实现,以下详细说明。

1. 先定义结构体xfat

在这里,我们考虑到要操作的是FAT32分区。那么每个分区,我们就可以一个结构体来表示,在结构体里面,可以放置FAT32分区本身特性相关的属性变量。当然,也可考虑到某些实现,添加一些特定的字段方便代码操作。例如,目前课程中的实现:

typedef struct _xfat_t {
    u32_t fat_start_sector;             // FAT表起始扇区
    u32_t fat_tbl_nr;                   // FAT表数量
    u32_t fat_tbl_sectors;              // 每个FAT表的扇区数
    u32_t total_sectors;                // 总扇区数
    xdisk_part_t * disk_part;           // 对应的分区信息
} xfat_t;

可以看到,通过这个结构体,我们获得该FAT32分区本身的一些部分信息,例如分区的扇区总数、所在的磁盘分区结构等。当然没有必要包含全部,有些是没有必要的,根据需要添加即可。在后面的代码中,我们还会向其中加入更多字段。

2. 再围绕结构体提供相应的功能

在定义好xfat结构体之后,围绕xfat结构体提供一组的接口,供其它代码调用,如
xfat_open()。当然在这些核心接口的内部实现,以及所调用的函数,大部分也会以xfat为参数,指明操作具体fat分区。

3. 小结

*简单点来说,即先定义结构体,再以结构体为中心,提供一组类似:int func(xfat_t fat, …..)类似的功能接口。**

这就与先考虑提供哪些功能接口,再设计接口的声明,再设计接口的实现不同。虽然,最后可能也会设计出xfat_t,但思考完全是相反的。

如果你学过C++或Java,那你应该知道用这些语言编程的核心任务就是设计类。上述方法就是和设计类是类似的。

类包含:属性+行为。属性在这里相当于结构体中的各字段,行为相应于int func(xfat_t * fat, …..)类似的功能接口。

注意事项

parse_fat_header的解析

在其中有对xfat中部分字段初始化,具体计算方式请参考FAT技术文档,以及下图。

FAT技术文档的内容较多,建议先看上面的图,了解整体分区的结构,然后跟着代码的操作去理解。文档中其它无关的部分可以暂时不读,以节省时间。

另外,再次建议不习惯阅读电子文档的同学,有条件的话,将文档打印出来,效率会高很多。

常见问题

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

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