fat文件系統詳解(fat12文件系統)

    本文主要介紹fat文件系統(fat12文件系統)詳解,下面一起看看fat文件系統(fat12文件系統)詳解相關資訊。
    文件系統是計算機系統不可缺少的一部分。可以說,除了一些簡單的單片機系統,文件系統是支撐每一個計算機系統運行的最重要的支撐,操作系統、應用程序、文檔、音視頻都是基于文件系統的。所以這說明了文件系統在計算機上的重要地位。嵌入式系統需要使用大容量存儲設備的場合很多。此時可以直接使用存儲設備的讀寫api來保存和讀取數據。然而,這與計算機系統的文件不兼容。如果要在嵌入式系統使用的內存中存儲電腦系統上的一張圖片或者txt文件,會很麻煩。但是,如果這種嵌入式存儲器采用與fat文件系統兼容的存儲格式,那么與個人電腦交換文件將會非常方便。比如一般場合用的tf卡,如果直接調用讀寫函數訪問tf也不是不可以,但是如果tf卡有fat文件系統,可以用讀卡器直接從電腦上拷貝文件,大大方便了文件的交互。
    鑒于文件系統的重要性,有必要分析一下文件系統的組成原理。這里以目前主流的windows文件系統fat32為對象,分析文件系統的存儲機制。
    下面簡單介紹一下fat32文件系統:fat32文件系統你并不陌生。最多在windows操作系統中有,但在一些嵌入式產品(如手機、mp3播放器、mp4播放器等)中也有。).從某種意義上來說,fat32文件系統是非常成功的,它使我們能夠更方便、更高效地組織數據,而無需受到底層存儲設備的驅動。配備大容量存儲器(如sd卡、cf卡、硬盤等)將是非常有意義的。)在帶有fat32文件系統的單片機系統中(比如創建的數據文件可以直接在windows等操作系統中讀取等。).
    我手里有一張512mb的tf卡。插入電腦,用二進制查看軟件打開tf卡。以下是復制數據的第一個512字節,用于解釋:
    偏移量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藝術.............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引導記錄操作系統引導記錄區)。dbr是我們進入fat32的第一道防線。事實上,dbr的bpb部分是這個區域的核心部分(第12 ~ 90個字節是bpb)。只有徹底理解bpb的含義,我們才能更好地認識和操作fat32。關于dbr在fat32中的位置就不多說了。上述數據中的前90個字節是bpb的主要部分。bpb的c語言結構如下:
    struct fat 32 _ dbr { unsigned char bs _ jmp boot[3];//跳轉指令offs: 0無符號charbs _ o: 3無符號char bpb _ bytes persc[2];//每扇區字節數offs: 11 unsigned char bpb _ secperclus[1];//每簇扇區數offs: 13 unsigned char bpb _ rsvdseccnt[2];//預留扇區數offs: 14 unsigned char bpb _ numfats[1];//本卷胖表數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];//軌道扇區數offs: 24 unsigned char bpb _ numh: 26 unsigned char bpb _ hidd sec[4];//前面隱藏扇區數//胖區偏移量: 28 unsigned char bpb _ totsec 32[4];//本卷總扇區數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];//保留扇區數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 };對于每個字段大小和含義都有詳細的注釋,解析這些數據是我們探索文件系統的首要任務。需要注意的是,在bpb,數據是以小端模式存儲的,所以需要轉換51單片機的大端模式,而一般arm的默認模式是小端模式,所以不需要進行轉換操作。
    在簡單介紹了dbr的bpb之后,我們需要介紹一下fat表(文件分配表)的概念。什么是文件分配表?顧名思義,它是一個為文件分配存儲空間的表,其中包含的不是文件的數據,而是文件所在簇的信息,下面會詳細說明。
    fat表是一種鏈式結構,用于在fat32文件系統中索引和定位磁盤數據(文件)。可以說fat表是fat32文件系統中最有特色的部分,其鏈式存儲機制也是fat32的精髓。也正是因為有了它,數據存儲才能不連續,磁盤的功能才能更好的發揮。
    那么胖表在哪里?到底是什么樣的?這時,我們將回到剛才的bpb部分。在bpb有一個字段叫bpb_rsvdseccnt,意思是預留山的數量,實際上是預留給bpb的空間的扇區數。也就是說這個值代表了fat表前面空間的大小,所以fat表的地址就是這個字段的值。實際上,為了保證文件系統中的正確性和穩定性,設置了兩個相同的fat表,并且兩個fat是同步的,也就是說,一個fat表的操作也要在另一個fat表中進行,以保證它們的內容時刻保持一致。這是為了安全起見。當一個fat因為某些原因損壞時,可以從另一個fat表中恢復。
    fat表的內容如下圖所示:
    上圖是一張實際的胖桌子。前8個字節 f8 ff ff 0f ff ff ff ff ff是fat32的fat頭標,表示這是fat表的開始。下面的數據是每四個字節一個簇項(從第二個簇開始),用來標記這個簇的下一個簇號。
    上面已經說了很多,都是圍繞集群這個詞。什么是集群?為什么要引入fat32?磁盤上最小的可尋址存儲單元稱為扇區,每個扇區通常為512字節。因為大部分文件都比扇區大很多,如果把最小的存儲空間分配給一個文件,內存就可以存儲更多的數據,這個最小的存儲空間就叫做一個簇。根據存儲設備(磁盤、閃存卡和硬盤)的容量,簇的大小可以不同,以最有效地利用存儲空間。在早期的360kb磁盤上,集群大小為2個扇區(1024字節);第一批10mb硬盤的簇大小增加到8個扇區(4096字節);今天的典型集群規模 的小型閃存設備是8kb或16kb。2gb以上的硬盤驅動器有32kb的簇。如果為大容量的存儲定義一個小簇,那么fat表的體積會非常大,導致數據冗余,效率下降。
    需要指出的是,簇是fat32數據存儲的最小單位,內部扇區不能再細分。即使文件的數據被寫入簇中,簇中仍有剩余容量(內部扇區未滿)。即使這個簇只寫一個字節,其他文件的數據也無法跟在數據后面,只能找到未被占用的簇。
    那么胖桌子有多大呢?fat表中每四個字節代表一個簇,所以fat表的大小由簇的實際數量決定。從這里也可以看出,集群太大的話,胖表會小,但是會浪費空間,而集群太小的話,會減少空間的浪費,但是會讓胖表臃腫。fat表的大小可以從bpb參數bpb_fatsz32中讀取。
    現在我們知道了fat表的地址和大小,我們也知道有了兩個fat表,我們就可以計算出第一個文件夾的位置,也就是根文件夾,它就在fat表的后面。計算方法如下:
    first dir sector = firstfatsector bpb _ num fats[0]* fat sectors,其中first fat sector表示fat表的位置,bpb _ numfats [0]表示fat表的數量,fat sectors表示fat表占用的扇區數量。其實根目錄所在的集群就是集群2。計算根文件夾的位置后,可以從根文件夾中讀取數據。其實fat32中已經擴展了文件的概念,目錄也是文件,而且根目錄的位置和其他目錄一樣,所以根目錄也算是文件。既然是文件,就會有文件名,根目錄的名字就是磁盤的卷標。
    所以下面說根目錄文件的內容。首先,目錄也是一個文件,可以看作是一個特殊的文件。該文件用于存儲其他文件或目錄的信息,如文件名、擴展名、屬性、創建時間、上次修改時間、文件初始簇號、文件長度等。所以當我想讀取一個文件信息時,我首先要做的就是從目錄中讀取文件信息數據。根據以上,我們獲得了根目錄的地址,所以可以從根目錄中讀取根目錄下的文件信息。每個文件/目錄由目錄文件中的32字節數據表示。具體字段如下。顯示:
    這樣,我們可以從根目錄讀取文件。作為一個實驗,我們不。;t設計嵌套目錄的結構,只做根目錄下的文件查看、讀寫實驗。所以我的512m tf卡的根目錄下有一個test.txt文件,根目錄下的數據如下:
    偏移量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系統~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文件系統中成功獲取根目錄中文件的信息。下一步就是找到文件存放位置,根據這個文件的信息讀取文件內容。
    32字節的文件信息已經明確給出。確定文件的實際簇號后,可以進入fat表查找文件的簇和簇鏈。根據文件長度字段,可以知道文件占用了多少簇。事實上,你可以根據簇的鏈式存儲結果知道文件所占的簇數,但是你不知道。;t不知道文件在最后一個簇中占了多少字節,所以文件長度字段還是很有意義的。找到相應的簇后,只需從相應的簇中讀取數據,簡單易行。;不是嗎?
    了解更多fat文件系統(fat12文件系統)詳解相關內容請關注本站點。

    將word中的圖片取出來(word文檔怎么把圖片取出來)
    傳舟筆記本垃圾,神舟筆記本是不是很爛不耐用買洋垃圾更好
    美的布谷風扇的扇葉有多少片組成(美的布谷風扇說明書)
    vivoxplay6和vivox21哪個好(vivox7和vivoxplay6哪個好)
    win10企業版怎么裝(window10企業版安裝教程)
    fat文件系統詳解(fat12文件系統)
    監控錄像機硬盤怎么設置
    小米手機怎么刷機圖片,小米如何刷機
    u盤出現數據寫入失敗的原因及其解決方法視頻(u盤出現數據寫入失敗的原因及其解決方法是什么)
    蘋果手機怎么更新日歷
    ios12.4發熱嚴重(ios12.5.3發熱)
    健身設備生產廠家(健身器材生產廠家排名)
    兩個硬盤系統怎么裝系統(兩個硬盤如何做雙系統)
    文件管理怎么安裝文件
    qq群接龍是什么功能(qq群接龍是什么樣子)
    lg g3 art怎么開,LGG3手機手寫板如何打開
    網絡科技公司稅點是多少 有免稅
    mx5雙屏幕怎么返回,魅族mx5返回鍵是哪個
    威剛固態硬盤,威剛的固態硬盤好還是聯想的固態硬盤好
    三星gti9158v怎么調模式,三星gti9158v護眼模式如何關閉
    主站蜘蛛池模板: 中文字幕一区二区日产乱码| 成人国产精品一区二区网站| 成人精品一区二区三区校园激情| 一本一道波多野结衣一区| 久热国产精品视频一区二区三区| 国产情侣一区二区三区| 99精品一区二区三区无码吞精| 成人精品一区二区三区不卡免费看| 暖暖免费高清日本一区二区三区 | 午夜在线视频一区二区三区| 无码少妇精品一区二区免费动态| 国产99精品一区二区三区免费| 日韩一区二区三区电影在线观看| 亚洲日本乱码一区二区在线二产线| 久久成人国产精品一区二区 | 日韩在线观看一区二区三区| 亚洲国产日韩在线一区| 日韩精品无码一区二区三区| 亚洲AV福利天堂一区二区三| 精品一区二区三区在线视频| 日本道免费精品一区二区| 视频在线观看一区二区三区| 日本精品啪啪一区二区三区| 亚洲AV网一区二区三区| 亚无码乱人伦一区二区| 国产精品高清一区二区三区不卡| 一区高清大胆人体| 日韩人妻无码一区二区三区久久 | 曰韩精品无码一区二区三区| 国产亚洲一区二区三区在线不卡| 日本视频一区二区三区| 国产成人精品a视频一区| jazzjazz国产精品一区二区| 波多野结衣的AV一区二区三区 | 国产精品视频一区二区猎奇| 国产精品一区二区久久| 成人精品一区二区三区电影| 国产在线第一区二区三区| 一区二区精品在线观看| 99久久精品费精品国产一区二区 | 免费无码VA一区二区三区|