文件--索引節點
POSIX沒有強制磁盤上的文件采取任何特定的表示方法,但是傳統的UNIX文件都是按照改進的樹狀結構來實現的。目錄項中包含一個文件名 和一個定長結構的引用(索引節點)。索引節點包含與文件長度、文件位置、文件所有者、創建時間、最後訪問時間、最後修改時間、文件權限有關的信息。如圖1所示:
圖 1
除了基本信息,還包含指向文件中前幾個數據塊的指針。如果文件很大,就需要使用到間接指針了。
單級間接指針是一個指向指針塊的指針,而指針塊中的指針是指向附加數據塊的;
二級間接指針是一個執行間接知真塊的指針;
三級間接指針塊包含了一個指向二級間接指針塊的指針。
文件系統在磁盤中存儲形式如圖1所示:
圖1. 磁盤中文件系統存儲形式
其中,文件屬性及指向文件中所存儲數據的指針存儲於i-nodes中,文件名、文件中所存儲的數據、該文件所對應的i-node編號存儲於data blocks中,數據單獨存儲。如圖2所示:
圖2. 磁盤中文件存儲形式
i-node中包含文件類型、文件訪問權限、文件大小、指向文件中所存儲數據的指針、文件鏈接數等信息。當使用link函數使得一個文件指向鏈接至該文件(即兩個文件具有相同的i-node值)時,我們稱之為硬鏈接,此時i-node中文件鏈接數被加1。需要刪除文件時,可使用unlink函數將目標路徑與文件的鏈接中斷(使該路徑文件的i-node值被清空,文件被刪除),注意,此時僅有目標路徑文件被刪除,該文件所對應的i-node中若鏈接數不為0,則代表有其他文件仍指向該文件,i-node中鏈接數將減1,其余信息保持不變。當使用symlink函數為目標文件建立符號鏈接時,將新建一個i-node,文件類型為symbolic link file,文件長度為目標文件名長度,文件數據指針與目標文件i-node中數據指針相同。
目錄
目錄文件在文件系統中的存儲形式與常規文件類似。目錄中所包含的文件名及其i-node值存儲在目錄文件塊中。其存儲形式如圖3所示:
圖3. 磁盤中目錄文件存儲形式