fat文件系統(tǒng)詳解(fat12文件系統(tǒng))

發(fā)布時間:2024-03-22
本文主要介紹fat文件系統(tǒng)(fat12文件系統(tǒng))詳解,下面一起看看fat文件系統(tǒng)(fat12文件系統(tǒng))詳解相關(guān)資訊。
文件系統(tǒng)是計算機系統(tǒng)不可缺少的一部分。可以說,除了一些簡單的單片機系統(tǒng),文件系統(tǒng)是支撐每一個計算機系統(tǒng)運行的最重要的支撐,操作系統(tǒng)、應(yīng)用程序、文檔、音視頻都是基于文件系統(tǒng)的。所以這說明了文件系統(tǒng)在計算機上的重要地位。嵌入式系統(tǒng)需要使用大容量存儲設(shè)備的場合很多。此時可以直接使用存儲設(shè)備的讀寫api來保存和讀取數(shù)據(jù)。然而,這與計算機系統(tǒng)的文件不兼容。如果要在嵌入式系統(tǒng)使用的內(nèi)存中存儲電腦系統(tǒng)上的一張圖片或者txt文件,會很麻煩。但是,如果這種嵌入式存儲器采用與fat文件系統(tǒng)兼容的存儲格式,那么與個人電腦交換文件將會非常方便。比如一般場合用的tf卡,如果直接調(diào)用讀寫函數(shù)訪問tf也不是不可以,但是如果tf卡有fat文件系統(tǒng),可以用讀卡器直接從電腦上拷貝文件,大大方便了文件的交互。
鑒于文件系統(tǒng)的重要性,有必要分析一下文件系統(tǒng)的組成原理。這里以目前主流的windows文件系統(tǒng)fat32為對象,分析文件系統(tǒng)的存儲機制。
下面簡單介紹一下fat32文件系統(tǒng):fat32文件系統(tǒng)你并不陌生。最多在windows操作系統(tǒng)中有,但在一些嵌入式產(chǎn)品(如手機、mp3播放器、mp4播放器等)中也有。).從某種意義上來說,fat32文件系統(tǒng)是非常成功的,它使我們能夠更方便、更高效地組織數(shù)據(jù),而無需受到底層存儲設(shè)備的驅(qū)動。配備大容量存儲器(如sd卡、cf卡、硬盤等)將是非常有意義的。)在帶有fat32文件系統(tǒng)的單片機系統(tǒng)中(比如創(chuàng)建的數(shù)據(jù)文件可以直接在windows等操作系統(tǒng)中讀取等。).
我手里有一張512mb的tf卡。插入電腦,用二進制查看軟件打開tf卡。以下是復(fù)制數(shù)據(jù)的第一個512字節(jié),用于解釋:
偏移量0 1 2 3 4 5 6 7 8 9 a b c d e f 00000000 eb 58 90 4d 53 44 4f 53 35 2e 30 00 02 08 74 18 x . msdos 5.0...f8 00 00 3f 00法國法郎00 00 00 00 00.....?..?.?.....00000020 00 34 0f00 c6 03 00 00 00 00 00 00 00 02 00 00 00 00..古英語中代表a和e之間元音的字母...........00000030 01 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000040 80 01 29 22 be a5 f6 4e 4f 20 4e 41 4d 45 20 20。) 編號00000050 20 20 46 41 54 33 32 20 20 20 20 33 c9 8e d1 bc f4 fat 32 3é| vˇ@ nˇv 00000070 40 b4 41 bb aa 55 cd 13 72 10 81 fb 55 aa 75 0a @ a uí。r..u u . 000000080 f6 c1 01 74 05 fe 46 02 eb 2d 8a 56 40 b4 08 cd奧賈德. t . fv @í000000090 13 73 05 b9 ff ff 8a f1 66 0f b6 c6 40 66 0f b6 . s . f. ℃@ f . 000000 a0 d1 80 e2 3f f7 e2 86 cd c0 ed 06 41 66 0f b7af . 000000 b066 f7 e1 66 89 46 f8 83 7e 16 00 75 39 83 7e 2a..u9 \u* 000000 c0 00 77 33 66 8b 46 1c 66 83 c00c bb 00 80 b9 01 .w3f?f.f?à.。000000 d0 00 e8 2c 00 e9 a8 03 a1 f8 7d 80 c4 7c 8b f0 ac .è.?}?|?e000000 e0 84 c0 74 17 3c ff 74 09 b4 0e bb 07 00 cd 10 eb ?àt.?t.。..000000 f0 ee a1 fa 7d eb e4 a1 7d 80 eb df 98 cd 16 cd 19000100 66 60 80 7e 02 00 0f 84 20 00 66 6a 00 66 50 06 f `~...fj . fp . 00000110 53 66 68 10 00 01 00 b4 42 8a 56 40 8b f4 cd 13 sfh....b?v@í.00000120 66 58 66 58 66 58 66 58 66 58 eb 33 66 3b 46 f8 72 03 fxfxfxfx 3f;0000130 f9 eb 2a 66 33 d2 66 0f b7 4e 18 66 f7 f1 fe c2 \u f \u n \u f \u 0000140 8a ca 66 8b d0 66 c1 ea 10 f7 76 1a 86 d6 8a 56 ?êf?efáê.÷v.?v00000150 40 8a e8 c0 e4 06 0a cc b8 01 02 cd 13 66 61 0f..ì ..一、?t?.?..f @ iu &; boo 00000170 54 4d 47 52 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00........00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................00000 1a 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0a 44 69..............迪000001 b0 73 6b 20 65 72 72 6f 72 ff 0d 0a 50 72 65 73 73error?..按000001 c0 2 0 61 6e 79 20 6b 65 79 20 74 6f 20 72 65 73 74任意鍵休息000001 d0 61 72 74 0d 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00藝術(shù).............000001 e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00................000001 f0 00 00 00 00 00 00 00 00 00 00 ac 01 b9 01 00 00 55 aa...........u let 下面說說最重要的dbr(dos引導(dǎo)記錄操作系統(tǒng)引導(dǎo)記錄區(qū))。dbr是我們進入fat32的第一道防線。事實上,dbr的bpb部分是這個區(qū)域的核心部分(第12 ~ 90個字節(jié)是bpb)。只有徹底理解bpb的含義,我們才能更好地認識和操作fat32。關(guān)于dbr在fat32中的位置就不多說了。上述數(shù)據(jù)中的前90個字節(jié)是bpb的主要部分。bpb的c語言結(jié)構(gòu)如下:
struct fat 32 _ dbr { unsigned char bs _ jmp boot[3];//跳轉(zhuǎn)指令offs: 0無符號charbs _ o: 3無符號char bpb _ bytes persc[2];//每扇區(qū)字節(jié)數(shù)offs: 11 unsigned char bpb _ secperclus[1];//每簇扇區(qū)數(shù)offs: 13 unsigned char bpb _ rsvdseccnt[2];//預(yù)留扇區(qū)數(shù)offs: 14 unsigned char bpb _ numfats[1];//本卷胖表數(shù)offs: 16 unsigned char bpb _ rootencnt[2];//fat32為0 offs: 17 unsigned char bpb _ totsec 16[2];//fat32為0 offs: 19 unsigned char bpb _ m: 21 unsigned char bpb _ fatsz 16[2];//fat32為0 offs:22無符號。d char bpb _塞克[2];//軌道扇區(qū)數(shù)offs: 24 unsigned char bpb _ numh: 26 unsigned char bpb _ hidd sec[4];//前面隱藏扇區(qū)數(shù)//胖區(qū)偏移量: 28 unsigned char bpb _ totsec 32[4];//本卷總扇區(qū)數(shù)offs: 32 unsigned char bpb _ fatsz 32[4];//胖表offs:36無符號charbpb _ : 40 unsigned char bpb _ fs v: 42 unsigned char bpb _ root clus[4];//根目錄簇號offs: 44 unsigned charfsinfo[2];//保留扇區(qū)數(shù)fsinfo offs: 48 unsigned char bpb _ bkbootsec[2];//通常6 offs: 50 unsigned char bpb _ r: 52 unsigned charbs _ drv num for : 64 unsigned char bs _ r: 65 unsigned char bs _ bootsig[1];//offs: 66 unsigned char bs _ volid[4];//offs: 67 unsigned char bs _ filsystyp: 71 unsigned char bs _ filsystyp: 82 };對于每個字段大小和含義都有詳細的注釋,解析這些數(shù)據(jù)是我們探索文件系統(tǒng)的首要任務(wù)。需要注意的是,在bpb,數(shù)據(jù)是以小端模式存儲的,所以需要轉(zhuǎn)換51單片機的大端模式,而一般arm的默認模式是小端模式,所以不需要進行轉(zhuǎn)換操作。
在簡單介紹了dbr的bpb之后,我們需要介紹一下fat表(文件分配表)的概念。什么是文件分配表?顧名思義,它是一個為文件分配存儲空間的表,其中包含的不是文件的數(shù)據(jù),而是文件所在簇的信息,下面會詳細說明。
fat表是一種鏈?zhǔn)浇Y(jié)構(gòu),用于在fat32文件系統(tǒng)中索引和定位磁盤數(shù)據(jù)(文件)??梢哉ffat表是fat32文件系統(tǒng)中最有特色的部分,其鏈?zhǔn)酱鎯C制也是fat32的精髓。也正是因為有了它,數(shù)據(jù)存儲才能不連續(xù),磁盤的功能才能更好的發(fā)揮。
那么胖表在哪里?到底是什么樣的?這時,我們將回到剛才的bpb部分。在bpb有一個字段叫bpb_rsvdseccnt,意思是預(yù)留山的數(shù)量,實際上是預(yù)留給bpb的空間的扇區(qū)數(shù)。也就是說這個值代表了fat表前面空間的大小,所以fat表的地址就是這個字段的值。實際上,為了保證文件系統(tǒng)中的正確性和穩(wěn)定性,設(shè)置了兩個相同的fat表,并且兩個fat是同步的,也就是說,一個fat表的操作也要在另一個fat表中進行,以保證它們的內(nèi)容時刻保持一致。這是為了安全起見。當(dāng)一個fat因為某些原因損壞時,可以從另一個fat表中恢復(fù)。
fat表的內(nèi)容如下圖所示:
上圖是一張實際的胖桌子。前8個字節(jié) f8 ff ff 0f ff ff ff ff ff是fat32的fat頭標(biāo),表示這是fat表的開始。下面的數(shù)據(jù)是每四個字節(jié)一個簇項(從第二個簇開始),用來標(biāo)記這個簇的下一個簇號。
上面已經(jīng)說了很多,都是圍繞集群這個詞。什么是集群?為什么要引入fat32?磁盤上最小的可尋址存儲單元稱為扇區(qū),每個扇區(qū)通常為512字節(jié)。因為大部分文件都比扇區(qū)大很多,如果把最小的存儲空間分配給一個文件,內(nèi)存就可以存儲更多的數(shù)據(jù),這個最小的存儲空間就叫做一個簇。根據(jù)存儲設(shè)備(磁盤、閃存卡和硬盤)的容量,簇的大小可以不同,以最有效地利用存儲空間。在早期的360kb磁盤上,集群大小為2個扇區(qū)(1024字節(jié));第一批10mb硬盤的簇大小增加到8個扇區(qū)(4096字節(jié));今天的典型集群規(guī)模 的小型閃存設(shè)備是8kb或16kb。2gb以上的硬盤驅(qū)動器有32kb的簇。如果為大容量的存儲定義一個小簇,那么fat表的體積會非常大,導(dǎo)致數(shù)據(jù)冗余,效率下降。
需要指出的是,簇是fat32數(shù)據(jù)存儲的最小單位,內(nèi)部扇區(qū)不能再細分。即使文件的數(shù)據(jù)被寫入簇中,簇中仍有剩余容量(內(nèi)部扇區(qū)未滿)。即使這個簇只寫一個字節(jié),其他文件的數(shù)據(jù)也無法跟在數(shù)據(jù)后面,只能找到未被占用的簇。
那么胖桌子有多大呢?fat表中每四個字節(jié)代表一個簇,所以fat表的大小由簇的實際數(shù)量決定。從這里也可以看出,集群太大的話,胖表會小,但是會浪費空間,而集群太小的話,會減少空間的浪費,但是會讓胖表臃腫。fat表的大小可以從bpb參數(shù)bpb_fatsz32中讀取。
現(xiàn)在我們知道了fat表的地址和大小,我們也知道有了兩個fat表,我們就可以計算出第一個文件夾的位置,也就是根文件夾,它就在fat表的后面。計算方法如下:
first dir sector = firstfatsector bpb _ num fats[0]* fat sectors,其中first fat sector表示fat表的位置,bpb _ numfats [0]表示fat表的數(shù)量,fat sectors表示fat表占用的扇區(qū)數(shù)量。其實根目錄所在的集群就是集群2。計算根文件夾的位置后,可以從根文件夾中讀取數(shù)據(jù)。其實fat32中已經(jīng)擴展了文件的概念,目錄也是文件,而且根目錄的位置和其他目錄一樣,所以根目錄也算是文件。既然是文件,就會有文件名,根目錄的名字就是磁盤的卷標(biāo)。
所以下面說根目錄文件的內(nèi)容。首先,目錄也是一個文件,可以看作是一個特殊的文件。該文件用于存儲其他文件或目錄的信息,如文件名、擴展名、屬性、創(chuàng)建時間、上次修改時間、文件初始簇號、文件長度等。所以當(dāng)我想讀取一個文件信息時,我首先要做的就是從目錄中讀取文件信息數(shù)據(jù)。根據(jù)以上,我們獲得了根目錄的地址,所以可以從根目錄中讀取根目錄下的文件信息。每個文件/目錄由目錄文件中的32字節(jié)數(shù)據(jù)表示。具體字段如下。顯示:
這樣,我們可以從根目錄讀取文件。作為一個實驗,我們不。;t設(shè)計嵌套目錄的結(jié)構(gòu),只做根目錄下的文件查看、讀寫實驗。所以我的512m tf卡的根目錄下有一個test.txt文件,根目錄下的數(shù)據(jù)如下:
偏移量0 1 2 3 4 5 6 7 8 9 a b c d e f 00400000 42 20 00 49 00 6e 00 66 00 6f 00 00 00 72 72 00 b . i . n . f . o...rr.00400010 6d...n...00400020 01 53 00 79 00 73 00 74 00 65 00 0f 00 72 6d 00...rm . 00400030 20 00 56 00 6f 00 6c 00 75 00 00 00 00 6d 00 65 00...4d 7e 31 20 20 20 20 16 00 23 bb 58系統(tǒng)~1..# x 00400050 7e 49 7e 49 00 00 bc 58 7e 49 03 00 00 00 00 00 ~ i ~ i..x~i......00400060 54 45 53 54 20 20 20 20 54 58 54 20 18 23 c0 58考試txt。#àx 00400070 7e 49 81 49 00 00 5a 57 7e 49 05 00 13 20 00 00 ~ i . i..zw~i.....00400080 54 41 4e 47 51 55 41 4e 20 20 20 08 00 00 00 00湯泉.....00400 09000000000000000 da 587e 49 000000000000 x ~ i 004000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000前面這兩個文件信息表面上可能代表一些隱藏的文件,但我不 我不知道它們是什么。無論如何,可以從fat32文件系統(tǒng)中成功獲取根目錄中文件的信息。下一步就是找到文件存放位置,根據(jù)這個文件的信息讀取文件內(nèi)容。
32字節(jié)的文件信息已經(jīng)明確給出。確定文件的實際簇號后,可以進入fat表查找文件的簇和簇鏈。根據(jù)文件長度字段,可以知道文件占用了多少簇。事實上,你可以根據(jù)簇的鏈?zhǔn)酱鎯Y(jié)果知道文件所占的簇數(shù),但是你不知道。;t不知道文件在最后一個簇中占了多少字節(jié),所以文件長度字段還是很有意義的。找到相應(yīng)的簇后,只需從相應(yīng)的簇中讀取數(shù)據(jù),簡單易行。;不是嗎?
了解更多fat文件系統(tǒng)(fat12文件系統(tǒng))詳解相關(guān)內(nèi)容請關(guān)注本站點。
上一個:2000元拍照手機排行榜2021前十名(2000元拍照手機最好的是哪一款)
下一個:檢測儀器常見故障維修

欒樹樹干被蛀的防治
菊花葉枯線蟲病防治
金立手機重力怎么設(shè)置,金立s6重力感應(yīng)設(shè)置在哪里啊 急急急 微信搖一搖用不了
m2固態(tài)硬盤的螺絲要擰緊嗎,華碩Z270主板裝m2固態(tài)硬盤要把主板上的六角擰下來嗎
造假侵犯商標(biāo)怎么處罰
紅楓的栽培與養(yǎng)護
智能化六氟化硫密度繼電器校驗儀概述
消費者選購茶葉的建議
5000以內(nèi)最好的筆記本電腦,5000元左右的筆記本電腦那個好
美圖m6貼膜怎么貼
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos