译注:
刚完成的项目内容涉及FAT 文件系统,因此在查阅手册的同时把文档翻译了一下,希望能对那些和我
一样初次使用FAT 的朋友有所帮助。因本人对FAT 并不十分了解,翻译所做的也只是文字表面工作,出现
各种错误在所难免,因此:本文只适用于初学者作为了解材料,需要获得技术信息的朋友请查阅原版英文
资料!
发现错误的朋友请mail指正,本人将不胜感激。
原文长5页,大意是告诫人们不要使用D 版云云,此略。
本文的一些约定
以字符“0x”开头的数字为16进制,若开头没有字符“0x”则表明该数字为 10进制。
本文的程序使用C 语言书写,书写风格可能与教科书中严格定义的有所出入。
一些变量在程序中没有注明其数据类型是 16-bit还是 32-bit,因为我们知道你有能力正确地完成这
些数据类型之间的转换,并保证在转换 32-bit 为 16-bit 的过程中不会造成数据丢失。同时请注意,所有
的数据类型均是无符号类型(UNSIGNED),不要尝试使用有符号整形(signed integer types)来进行 FAT
运算,否则一些FAT 卷将会因此而出错。
概述(适用于所有FAT 类型)
起先所有的FAT 文件系统都是为 IBM PC 机器而设计的,这说明了一个重要的问题:FAT 文件系统在磁
盘上的数据是以“小端” (little-endian) 结构存储的。我们使用 4 个 8-bit 的字节 -- 起始字节为
byte[0],结束字节为 byte[3] -- 来存储一个 32-bit 的 FAT 项(FAT entry)。然后分别给这 32 位编号为
00-31,从下表我们可以清楚地看到这 32位是如何排序的(最低位为00).
byte[3] 3 3 2 2 2 2 2 2
1 0 9 8 7 6 5 4
byte[2] 2 2 2 2 1 1 1 1
3 2 1 0 9 8 7 6
byte[1] 1 1 1 1 1 1 0 0
5 4 3 2 1 0 9 8
byte[0] 0 0 0 0 0 0 0 0
7 6 5 4 3 2 1 0
这对于那些使用“大端”(big-endian)存储结构的机器就显得尤为重要,因为在磁盘存取数据之前,
必须先完成big-endian 和 little-endian之间的转换。
每个FAT 文件系统由4 部分组成,这些基本区域按如下顺序排列:
0 – 保留区(Reserved Region)
1 – FAT区(FAT Region)
2 – 根目录区(Root Directory Region, FAT32卷没有此域)
3 – 文件和目录数据区(File and Directory Data Region)
完整的pdf格式文档51黑下载地址(共24页):
FAT32中文版.pdf
(1.36 MB, 下载次数: 105)
|