FDT表的结构
(2012-02-21 13:40:49)
标签:
sd卡fat32 |
分类: 学习 |
FDT(File Directory
Table)表即为文件目录表,也称为根目录区或ROOT区。用格式化命令(FORMAT)对硬盘(或逻辑盘)进行格式化的时候,就已经为整个硬盘建立了一个根目录FDT。FDT位于第二个FAT表之后,只有当FAT表不能定位文件在硬盘中的位置时,FAT才需和FDT配合以便能准确定位文件的位置。
在硬盘根目录下,用户可以再创建不同的子目录,以及子目录下的子目录。当然,根目录以及各级子目录也都有自己的FDT。
根目录的作用是分配根目录下的所有文件和子目录的存储空间(逻辑扇区号),并通过设备驱动程序接口确定有效的最大目录项。
根目录下的所有文件及其子目录在根目录的文件目录表(FDT)中都有一个目录登记项(简称为目录项)。每个目录登记项占用32个字节,分为8个区域,提供有关文件或子目录的信息。其中包括了操作系统的系统文件(IO.SYS、MSDOS.SYS和COMMAND.
COM)的目录项。
1.FAT16根目录中的FDT结构
在硬盘中,各逻辑盘的根FDT的起始逻辑扇区由分区容量确定。在FAT16分区格式中,FDT表的长度为32个扇区(256个表项),每个目录项为32个字节,最多保存512个文件或子目录。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明,其具体内容与含义如表2-6所示。
表2-6
FAT16分区格式下FDT表的内容与含义
FAT16分区格式对每个文件来说其数据结构是一个单向簇链表,而每个文件在文件目录表FDT中占一个文件目录项,每个文件的首簇号就存放在该文件的目录项中,一个文件目录项占32个字节。FDT中一个文件目录项的几个参数值的说明如下。
·
文件名:FAT16分区格式中,FDT的文件目录项中第0~7字节为文件名(若有剩余字节则用空白符20H填充)。其中,第1字节又表明了该文件的状态,它的取值方式有3种,第一种为00H,表示目录项的空表项(即未使用的目录项);第二种为E5H,表示该目录项曾经使用过,但文件已被删除;第三种为其他任何合法字符,表示一个文件名(或子目录名)的第一个字符的ASCII码值,如果是子目录下的两个特殊文件“.”或“..”目录项,其ASCII码为2EH和2E2EH。
·
知识提示:“.”表示当前子目录,“..”表示上一级目录。它们同其他子目录一样没有长度。其中“.”项所报告的首簇号是子目录本身的起始簇号;“..”项所报告的首簇号是上一级目录的起始簇号。若上一级目录是根目录,则该簇号值将被置为0。系统利用此结构来实现目录之间的双向联系,从而将整个文件系统联系在一起。
·
文件属性:第11字节为文件属性字节,该字节中各位的内容如表2-7所示。
表2-7 第11字节的位与内容
·
文件创建(修改)时间:其中第22字节(0~4位)表示以2秒为增量的二进制数;第23字节(0~2位)与第22字节(5~7位)为分钟;第23字节(3~7位)为小时。
·
文件创建(修改)日期:其中第24字节(0~4位)为日期1~31;第25字节(0位)与第24字节(5~7位)为月份1~12;第25字节(1~7位)为年份0~119(即1980~2099年)。
·
文件首簇号:第26和第27字节存放该文件的首簇号,系统根据这两个字节中的值乘以2得到它在FAT中该文件的单向链表的首表项,再通过FAT即可找到文件的全部内容。
·
注意:这里要注意区分FDT和FDT中的目录登记项这两个概念。目录登记项是一个32字节长的数据块,它记录了一个文件或子目录的有关信息;FDT是由若干目录登记项组成的一个表。
2.FAT32根目录中的FDT结构
在FAT32分区格式下,根目录区不再具有固定区域、固定大小,它可看作是数据区的一部分,这是因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,通常情况下从第2簇开始使用,其大小视存储文件的需要而增加。鉴于这种情况,根目录下的文件数目将突破512个的限制。但每个目录项还是为32个字节,可以是文件目录项、子目录项、卷标项(仅根目录有)、已删除目录项、长文件名目录项等,其具体内容与含义如表2-8所示。
表2-8
FAT32分区格式下FDT表的内容与含义
FAT32分区格式的FDT中一个文件目录项的几个参数值的说明如下。
·
文件属性:第11字节同样为文件属性字节,它按二进制位定义,最高两位保留未用,0~5位分别为只读位、隐藏位、系统位、卷标位、子目录位与归档位;当只读位、隐藏位、系统位、卷标位全为1,其他位全为0,即11字节为0FH时表示该项为长文件名记录项。
·
文件创建时间:即第14~15字节,其中高5位为小时,次6位为分钟,再次5位为秒,最后8位为单位精确到10毫秒的创建秒数。
·
文件创建、访问、修改日期:即16~17、18~19、24~25字节,其中高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
·
文件最新修改时间:即22~23字节,其中高5位为小时,次6位为分钟,后5位的倍数为秒数。
在硬盘根目录下,用户可以再创建不同的子目录,以及子目录下的子目录。当然,根目录以及各级子目录也都有自己的FDT。
根目录的作用是分配根目录下的所有文件和子目录的存储空间(逻辑扇区号),并通过设备驱动程序接口确定有效的最大目录项。
根目录下的所有文件及其子目录在根目录的文件目录表(FDT)中都有一个目录登记项(简称为目录项)。每个目录登记项占用32个字节,分为8个区域,提供有关文件或子目录的信息。其中包括了操作系统的系统文件(IO.SYS、MSDOS.SYS和COMMAND.
COM)的目录项。
1.FAT16根目录中的FDT结构
在硬盘中,各逻辑盘的根FDT的起始逻辑扇区由分区容量确定。在FAT16分区格式中,FDT表的长度为32个扇区(256个表项),每个目录项为32个字节,最多保存512个文件或子目录。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明,其具体内容与含义如表2-6所示。
表2-6
FAT16分区格式下FDT表的内容与含义
字节位置 |
内容与含义 |
0~7字节 |
表示文件名 |
8~10字节 |
表示文件的扩展名 |
11字节 |
表示文件属性 其中00H为读写,01H为只读,02H为隐藏,04H为系统,08H为卷标,10H为子目录,20H为归档(只要完成了写操作并已关闭,则该位置就置为1) |
12~21字节 |
保留未用 |
22~23字节 |
表示文件的创建时间 |
24~25字节 |
表示文件的创建日期 |
26~27字节 |
表示文件的起始簇号(首簇号) |
28~31字节 |
表示文件的字节数 |
FAT16分区格式对每个文件来说其数据结构是一个单向簇链表,而每个文件在文件目录表FDT中占一个文件目录项,每个文件的首簇号就存放在该文件的目录项中,一个文件目录项占32个字节。FDT中一个文件目录项的几个参数值的说明如下。
·
文件名:FAT16分区格式中,FDT的文件目录项中第0~7字节为文件名(若有剩余字节则用空白符20H填充)。其中,第1字节又表明了该文件的状态,它的取值方式有3种,第一种为00H,表示目录项的空表项(即未使用的目录项);第二种为E5H,表示该目录项曾经使用过,但文件已被删除;第三种为其他任何合法字符,表示一个文件名(或子目录名)的第一个字符的ASCII码值,如果是子目录下的两个特殊文件“.”或“..”目录项,其ASCII码为2EH和2E2EH。
·
知识提示:“.”表示当前子目录,“..”表示上一级目录。它们同其他子目录一样没有长度。其中“.”项所报告的首簇号是子目录本身的起始簇号;“..”项所报告的首簇号是上一级目录的起始簇号。若上一级目录是根目录,则该簇号值将被置为0。系统利用此结构来实现目录之间的双向联系,从而将整个文件系统联系在一起。
·
文件属性:第11字节为文件属性字节,该字节中各位的内容如表2-7所示。
表2-7 第11字节的位与内容
位 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
内容 |
未用 |
未用 |
归档 |
子目录 |
卷标 |
系统 |
隐藏 |
只读 |
·
文件创建(修改)时间:其中第22字节(0~4位)表示以2秒为增量的二进制数;第23字节(0~2位)与第22字节(5~7位)为分钟;第23字节(3~7位)为小时。
·
文件创建(修改)日期:其中第24字节(0~4位)为日期1~31;第25字节(0位)与第24字节(5~7位)为月份1~12;第25字节(1~7位)为年份0~119(即1980~2099年)。
·
文件首簇号:第26和第27字节存放该文件的首簇号,系统根据这两个字节中的值乘以2得到它在FAT中该文件的单向链表的首表项,再通过FAT即可找到文件的全部内容。
·
注意:这里要注意区分FDT和FDT中的目录登记项这两个概念。目录登记项是一个32字节长的数据块,它记录了一个文件或子目录的有关信息;FDT是由若干目录登记项组成的一个表。
2.FAT32根目录中的FDT结构
在FAT32分区格式下,根目录区不再具有固定区域、固定大小,它可看作是数据区的一部分,这是因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,通常情况下从第2簇开始使用,其大小视存储文件的需要而增加。鉴于这种情况,根目录下的文件数目将突破512个的限制。但每个目录项还是为32个字节,可以是文件目录项、子目录项、卷标项(仅根目录有)、已删除目录项、长文件名目录项等,其具体内容与含义如表2-8所示。
表2-8
FAT32分区格式下FDT表的内容与含义
字 节 位 置 |
内容与含义 |
0~7字节 |
表示文件名 |
8~10字节 |
表示文件的扩展名 |
11字节 |
表示文件属性 |
12~13字节 |
仅长文件名目录项用,存储其对应的短文件名目录字节校验和等 |
14~15字节 |
24位二进制文件建立时间 |
16~17字节 |
16位二进制文件建立日期 |
18~19字节 |
16位二进制文件最新访问日期 |
20~21字节 |
文件首簇号的高16位 |
22~23字节 |
16位二进制文件最新修改时间 |
24~25字节 |
16位二进制文件最新修改日期 |
26~27字节 |
文件首簇号的低16位 |
28~31字节 |
32位文件的字节长度 |
FAT32分区格式的FDT中一个文件目录项的几个参数值的说明如下。
·
文件属性:第11字节同样为文件属性字节,它按二进制位定义,最高两位保留未用,0~5位分别为只读位、隐藏位、系统位、卷标位、子目录位与归档位;当只读位、隐藏位、系统位、卷标位全为1,其他位全为0,即11字节为0FH时表示该项为长文件名记录项。
·
文件创建时间:即第14~15字节,其中高5位为小时,次6位为分钟,再次5位为秒,最后8位为单位精确到10毫秒的创建秒数。
·
文件创建、访问、修改日期:即16~17、18~19、24~25字节,其中高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
·
文件最新修改时间:即22~23字节,其中高5位为小时,次6位为分钟,后5位的倍数为秒数。
前一篇:[转载]单片机的存储器
后一篇:[转载]argc argv(1)