文件系统:FAT16
生活随笔
收集整理的這篇文章主要介紹了
文件系统:FAT16
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前文介紹了FAT12,本文則介紹FAT16。顧名思義,FAT表項占用16bits即FAT16。其特點:
FAT16結構
每個扇區默認512字節;根據容量不同,每個簇有1至64個扇區。
FAT表2(如果存在)是FAT表1的備份。
根目錄最多包涵512個目錄項
DBR結構
typedef struct {__u8 JMP[3]; //0 __u8 OEM[8]; //3__u16 SectorBytes; //11 每扇區字節數__u8 ClusterSectors; //13 每簇扇區數__u16 ReservedSectors; //14 保留扇區數(含DBR扇區)__u8 FATs; //16 FAT表個數__u16 RootEntries; //17 根目錄文件數__u16 TotalSectorsL; //19 磁盤總扇區數(﹤32MB)__u8 MediaType; //21 介質描述符0xF0__u16 FatSectors; //22 FAT表所占扇區數__u8 res2[8]; //24__u32 TotalSectorsH; //32 磁盤總扇區數(≧32MB)__u8 res3[2]; //36__u8 ExtBootSignature; //38 擴展引導標記0x29__u32 VolumeSerial; //39 卷序列號__u8 Volume[11]; //43 卷標__u8 FS[8]; //54 文件系統類型FAT12__u8 res4[448]; //62 引導代碼區 __u16 Signature; //510 結束標志0xAA55 }fat16_dbr_t;FAT表
FAT即File Allocation Table,它表示文件的分配信息;每個FAT表項為16bits;簇號從2開始(簇號0和1保留);每個簇值指向下一個簇號;
#define FAT16_CLUSTER_UNUSED 0x0000 #define FAT16_CLUSTER_END 0xFFF8 #define FAT16_CLUSTER_BAD 0xFFF7__u16 fat16_get_next_cluster(__u16 current) {return = *((__u16*)&m_pFAT[current * 2]); }
上圖中,簇號0和1分別為0xfff8、0xffff
簇2指向0x0003,簇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 0x20typedef struct {__u8 name[11]; // 短名 8.3結構__u8 attribute; // 文件屬性__u8 res1;__u8 refine;__u16 create_time; // 文件創建時間__u16 create_date;__u16 access_date; // 文件訪問時間__u16 start_cluster_h; // 文件起始簇號__u16 modify_time; // 文件修改時間__u16 modify_date;__u16 start_cluster_l; __u32 size; // 文件大小 }fat_directory_t;typedef struct {__u8 Index; // 文件名序號,倒序,第一個加0x40,低4位表示長目錄項個數__u8 Name1[10]; // 文件名[1-5],unicode編碼__u8 attr; // 屬性:0x0F(長名)__u8 res1;__u8 chksum; // 目錄項校驗和__u8 Name2[12]; // 文件名[6-11],unicode編碼__u8 res2[2];__u8 Name3[4]; // 文件名[12-13],unicode編碼 }fat_long_directory_t;一個長目錄項最多包含文件名中的13個unicode字符,多項按序號拼接可得完整的文件名。一個長文件名占用的目錄項個數:(文件名字符數 + 12) / 13 + 1(有長名就有短名)。下圖中文件名commonui_zh_CN.str占用二個長目錄項和一個短目錄項。
格式化
根據容量創建鏡像
根據目錄創建鏡像
總結
以上是生活随笔為你收集整理的文件系统:FAT16的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言用typedef定义结构体,C语言
- 下一篇: 污水处理系统 | 污水处理项目