檔案和目錄在儲存的儲存結構

2021-08-14 23:06:01 字數 1451 閱讀 6959

檔案系統的三個區域分別為:(1)超級塊(2)i-節點表(3)資料區

超級塊存放檔案系統本身的結構資訊。i-節點表存放檔案本身的屬性(*i-節點在檔案系統中的位置是固定的,序號從0開始)。

資料區存放檔案的內容。

建立檔案的過程:

(1)、核心先找到乙個空的i節點。將檔案屬性儲存在i節點中

(2)、將檔案的內容存在資料塊中。

(3)、將檔案內容在資料塊中的序號按檔案內容的先後順序存放在i-節點的磁碟分布區。

(4)、核心將檔案入口(i-節點序號,檔案名字)新增到目錄檔案。檔名和i-節點號之間的對應關係將檔名和檔案的內容及屬性連線去來。

目錄是抽象模型是乙個包含i-節點號和檔名的表。

從目錄檔案找到資料的步驟:(跟建立檔案的順序相反)

(1)根據檔名在目錄中找到檔案i節點序號

(2)根據i-節點的序號定位i-節點的位置,並且讀取i-節點的內容。

(3)通過i-節點中儲存的檔案內容所在資料塊位置的資訊,在資料塊中查詢檔案的內容(呼叫read函式)

這也是對目錄的操作第乙個總是呼叫open函式的原因。

當檔案太大時候,採用間接儲存的方法,將i-節點的分配鍊錶儲存不下的內容存在資料塊中, 這種塊被稱為間接塊。

硬鏈結是指向資料塊的,因此i-節點號相同,符號鏈結是指向原本指向資料塊的i節點對應的檔名,因此刪除原始檔,只是斷開乙個i-節點和資料塊的鏈結,硬鏈結還可以檢視檔案內容,而如果刪除符號鏈結所鏈結的檔案,符號鏈結不能通過i-節點找到檔案內容所在塊,所有符號鏈結會失效。

硬鏈結不能跨越檔案系統,符號鏈結可以。

裝置檔案:

裝置檔案是鏈結,裝置檔案的i-節點儲存的是指向核心子程式的指標,而不是檔案大小和儲存列表,核心中傳輸裝置資料的子程式被稱為裝置驅動程式。

磁碟檔案與核心之間有緩衝,裝置檔案與磁碟之間沒有緩衝。

緩衝:

#includeint s;

s = fcntl(fd,f_getfl);

s |= o_sync;

result = fcntl(fd,f_setfl,s);

if(result == 1)

perror("setting sync");

位邏輯或操作開啟位哦o_sync,該位告訴核心,對write的呼叫僅能在資料寫入實際的硬體時才能返回,而不是在資料複製到核心緩衝時就執行預設 的返回操作。

linux下的檔案目錄和儲存結構總結

linux下並不存在c d e f盤,所有的檔案及目錄都是以樹形結構劃分的,並且每個檔案都規定了自己的作用範圍。每個目錄的具體作用 常用的一些目錄 目錄名稱 應放置檔案的內容 boot 開機所需檔案 核心,開機選單及所需配置檔案等 dev 任何裝置與介面都以檔案形式存放在此目錄 etc 配置檔案 h...

佇列的順序儲存結構和鏈式儲存結構

佇列 queue 是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表 在隊尾進行插入操作,在對頭進行刪除操作 與棧相反,佇列是一種 先進先出 first in first out,fifo 的線性表。與棧相同的是,佇列也是一種重要的線性結構,實現乙個佇列同樣需要順序表或鍊錶作為基礎。佇列既可...

棧的順序儲存結構和鏈式儲存結構

在表尾進行插入和刪除操作的線性表 仍然滿足線性表的操作,只是在push和pop有些區別 棧頂 top 允許插入和刪除,另一端稱棧底 bottom 不含任何資料元素的棧叫空棧。棧 後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入稱為進棧,也稱壓棧,入棧。棧的刪除稱為出...