浅尝辄止57-FAT32-拆个优盘8

来个FAT表尝尝。

FAT表

从前面的文章里,可以推算FAT表的地址是0x1B4000。

  • 它是一个表就会有表项,从这个地址开始,每32位是一个表项,所以下图中有12个表项
  • 除了前两个表项,一个表项对应一个簇的使用情况
  • 0号和1号表项是一些文件系统相关信息,并不对应任何簇,所以就可以解释为什么有效簇号要从2开始,就是因为0、1表项被用作它用了,2号表项才开始对应簇
  • 表项(除0、1)里的值正常情况下有3种,分别是文件的中间簇文件的结尾簇空闲簇。是的,不存在开头簇,因为和中间簇是一样的,下文体会。

FAT表机制

下面通过完全读取一个文件来理解FAT表的原理。根据前面的文章,我们可以找到文件内容的第一个簇。
这时有两种情况

  1. 文件内容大小不足一个簇,那么这个簇,即是第一个簇,又是最后一个簇,这个簇对应的FAT表项值就是FF FF FF 0F
  2. 文件内容大小占用若干个簇,那么这个簇仅仅是第一个簇,后面的内容在哪些簇还不知道
    这种情况下,FAT表的机制就要起作用了。

举例

假设把一个大文件按簇大小切成N块,分别存储到簇号为Cn(n=1,2...N)的簇中,则其内容和FAT表如下

文件内容块编号 1 2 ... N-1 N
存储簇号 C1 C2 ... CN-1 CN
FAT表内容 C2 C3 ... CN FF FF FF 0F

因此,读取一个文件的过程可以是这样的

  1. 簇号为起始簇
  2. 找到簇,读出内容
  3. 查看当前簇的FAT表项的值
    如果不是文件的结尾簇,就令簇号为表项值,走到过程2
    如果是文件的结尾簇,文件读取完毕
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容