檔案系統 FAT12

2021-07-28 14:14:23 字數 2137 閱讀 7533

fat12是dos時代使用的檔案系統,適用於軟盤等小容量儲存介質。其特點:

小容量,最大為4.1mb

以簇為單位,最大簇數4084

每個fat表項佔12bits,所以稱之為fat12

每個扇區預設512位元組;根據容量不同,每個簇有1至4個扇區。

fat表2(如果存在)是fat表1的備份。

根目錄最多包涵512個目錄項

fat即file allocation table,它表示檔案的分配資訊;每個fat表項為12bits;簇號從2開始(簇號0和1保留);每個簇值指向下乙個簇號;

#define fat12_cluster_unused    0x000

#define fat12_cluster_end 0xff8

#define fat12_cluster_bad 0xff7

依據上述公式,下圖中:

簇號0和1分別為0xff8、0xfff

簇2指向0x168,簇3指向0x004,簇4指向0x005,……

如果知道了檔案的起始簇號,那麼就可以從fat表中取得完整的簇鏈。

目錄項結構存放檔名稱、屬性、時間、起始簇號等資訊。分長名和短名,短名含乙個目錄項結構,長名則包括多個目錄項結構。

#define file_attr_readonly      0x01

#define file_attr_hidden 0x02

#define file_attr_system 0x04

#define file_attr_volume 0x08

#define file_attr_longname 0x0f

#define file_attr_directory 0x10

#define file_attr_archive 0x20

typedef struct

fat_directory_t;

typedef struct

fat_long_directory_t;

乙個長目錄項最多包含檔名中的13個unicode字元,多項按序號拼接可得完整的檔名。乙個長檔名占用的目錄項個數:(檔名字元數 + 12) / 13 + 1(有長名就有短名)。下圖中檔名commonui_zh_cn.str占用二個長目錄項和乙個短目錄項。

查容量表得簇大小

計算總簇數

根據總簇數計算fat表扇區數

減去根目錄32個扇區

剩餘扇區數(>=1)歸為保留扇區

填寫dbr資訊

查容量表得簇大小

計算總簇數

根據總簇數計算fat表扇區數

減去根目錄32個扇區

剩餘扇區數(>=1)歸為保留扇區

填寫dbr資訊

向根目錄新增子目錄(順序分配簇號、計算並建立長短目錄項)

向根目錄新增檔案(順序分配簇號、計算並建立長短目錄項、拷貝檔案內容)

向子目錄新增檔案/目錄(計算長短目錄項,檢查子目錄所在簇剩餘空間,不夠則分配新簇並擴充套件簇鏈;建立長短目錄項;為檔案分配簇鏈,拷貝檔案內容)

遞迴計算各級目錄下的長短目錄項大小和檔案長度

按不同簇大小對齊計算累加大小並與容量表中的簇大小進行適配得到合適的簇大小及總容量

根據總容量進行格式化

遞迴新增檔案和目錄

FAT12檔案系統總結

一 fat12 檔案系統 12位檔案分配表 檔案系統 邏輯層,不關心物理的儲存位置,將資料快抽象成線性的可隨機訪問的,從0開始的陣列 二 層次 扇區 最小單元,512位元組 引導扇區 0扇區 bpb biso paremeter block 簇 資料區儲存檔案資料的基本單位,包含乙個或多個扇區,2的...

STM32 FATFS檔案系統之FAT12問題集錦

例如 使用 res f open file,0 log text.txt fa open always fa write 建立txt檔案,結果 res fr ok 進入u盤模式檢視,卻發現log資料夾下面,沒有text.txt檔案 事故原因 log目錄可用扇區為0,text.txt無法寫入log目錄...

FAT12檔案系統之資料儲存方式詳解

fat12檔案系統之資料儲存方式詳解 位址是 同時,也編寫了乙個簡單的引導程式來驗證了這個引導扇區的資料結構,詳情 位址是 下面我們來詳細了解一下fat檔案分配表 根目錄 使用者資料的資料結構,只有通過詳細分析這些資料結構,才能自由的訪問fat12格式的磁碟檔案。我們先來看看檔案分配表的資料格式,檔...