FAT32原理.docx
文件大小: 88k
源码售价: 10 个金币 积分规则     积分充值
资源说明:FAT32 文件系统原理 FAT32 文件系统是目前最常用的文件系统之一,它广泛应用于各种设备中,如个人计算机、笔记本电脑、移动存储设备等。FAT32 文件系统的原理是指文件如何存放和遍历、目录的内容和遍历方式、如何查找文件、目录如何构成树形结构等。 1. 主引导记录(MBR) FAT32 文件系统的第一个部分是主引导记录(MBR),它描述了这个磁盘分成了几个分区。每个分区的信息放在一个 16 字节的表里,主要信息有:这个分区的起始地址、结束地址、分区的大小。 2. 分区结构 一个分区由保留扇区、FAT、FAT 备份、数据区四部分组成。 * 保留扇区:保留扇区的主要内容为 DBR(分区引导记录),DBR 会记录保留扇区的大小(以扇区为单位),FAT 的大小(以扇区为单位)(FAT 备份的大小和 FAT 一样),一个簇包含几个扇区。 * FAT(和数据区合在一起看):FAT 里只存了一样东西:簇项。每个簇项占用 4 个字节。数据区里每一个簇都会对应一个簇号、一个簇项,放在 FAT 里。起始地址的 4 个字节对应 0 号簇,后面依次累加。 * FAT 备份:内容与 FAT 一致。 * 数据区:数据区以簇为单位,起始地址开始为 2 号簇,后面依次累加。数据区包括两类:文件数据结点、目录数据结点。每个结点占用一个簇。 3. 文件和目录的存储 一个文件由一个或多个文件数据结点组成。一个目录由一个或多个目录数据结点组成。你可以把目录也想象成一个文件。所有数据结点是一个单链表(只要知道链表头结点,就能遍历整个链表),只要知道链表头结点的簇号,找到 FAT 表里的簇项,通过 FAT 表,就能找到所有数据结点,就可以获取整个文件的数据了。 4. 目录的树形结构 目录是以树形结构串联的,一个目录就是一个结点,目录结点有父结点和很多子结点,也就是上一层目录和很多子目录。目录数据里包含了文件目录项,32 个字节。文件目录项可以是文件,也可以是目录。每个目录数据固定包含两个文件目录项:当前目录和上一层目录。 5. 文件和目录的查找 当你在根目录下创建一个空文件夹,空文件夹也是一个目录,在根目录的目录数据里就会多一个文件目录项,对应这个空文件夹。空文件夹的文件目录项会指出空文件夹对应的目录数据的起始簇号。空文件夹的目录数据就会自动填入两个文件目录项(当前目录和上一层目录)。其中,上一层目录的文件目录项会指出起始簇号,以反向寻找到上一层目录的目录数据。 同理,如果你在根目录下创建一个文件 1.txt。根目录的目录数据里就会多一个文件目录项,对应 1.txt。这个文件目录项会指出文件数据的起始簇号,通过 FAT,就能找到 1.txt 的所有文件数据。 如果你在 1.txt 文件里写入内容,超过了一个簇。此时 1.txt 占用两个簇的空间。起始簇号(假设为 5)对应的 FAT 里的簇项,值会指向下一个簇号(假设为 22),簇号 22 对应的簇项,值为 0x0FFFFFFF,表示这是文件的最后一个簇。 如果你在根目录下删除 1.txt。那么 1.txt 的文件目录项首字节会变成 0xE5,表示这个文件目录项废了。然后找到 1.txt 的起始簇号,把 FAT 里所有 1.txt 的簇项都清 0,这些簇的空间就释放出啦了。 用 fopen 打开” H:\dir00\dir0\first.txt”,我觉得 H: 就是一个分区他会先找保留扇区里的 DBR,找到根目录的目录数据的起始簇号,跳到根目录的目录数据里,然后在目录数据里查找文件目录项,找到一个名字为”dir00”、属性为子目录(说目录更准确一点)的文件目录项,然后找到”dir00”目录的起始簇号,跳到”dir00”的目录数据里,然后在目录数据里查找文件目录项,找到一个名字为”dir0”、属性为子目录的文件目录项,然后找到”dir0”目录的起始簇号,跳到”dir0”的目录数据里,然后在目录数据里查找文件目录项,找到一个名字为 first、属性为归档的文件目录项,然后找到它的起始簇号。 在 windows 的命令行里进入一个目录,比如”H:\dir00”,他就会跳到”dir00”目录的目录数据里,输入 dir 命令,他就会查找目录数据里的文件目录项,第一个为当前目录 . ,第二个为上一层目录 .. ,第三个就是其他目录或者文件,输入 cd ..命令,他就会找到 ..
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。