淺嘗輒止57-FAT32-拆個優(yōu)盤8

來個FAT表嘗嘗。

FAT表

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

  • 它是一個表就會有表項,從這個地址開始,每32位是一個表項,所以下圖中有12個表項
  • 除了前兩個表項,一個表項對應一個簇的使用情況
  • 0號和1號表項是一些文件系統(tǒng)相關信息,并不對應任何簇,所以就可以解釋為什么有效簇號要從2開始,就是因為0、1表項被用作它用了,2號表項才開始對應簇
  • 表項(除0、1)里的值正常情況下有3種,分別是文件的中間簇文件的結尾簇、空閑簇。是的,不存在開頭簇,因為和中間簇是一樣的,下文體會。

FAT表機制

下面通過完全讀取一個文件來理解FAT表的原理。根據(jù)前面的文章,我們可以找到文件內容的第一個簇。
這時有兩種情況

  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
    如果是文件的結尾簇,文件讀取完畢
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容