1. 程式人生 > >unix環境高階程式設計-4.14-檔案系統

unix環境高階程式設計-4.14-檔案系統

檔案系統

為了說明檔案連線的概念,先要介紹UNIX檔案系統的基本結構,同時,瞭解i節點和志向i將誒點的目錄項之間的區別也是很有益處的。

目前正在使用的UNIX檔案系統有多種實現。例如,SOLARIS支援多種不同型別的磁碟檔案系統:傳統的機遇BSD的unix檔案系統,ufs,讀寫DOS格式哈軟盤的檔案系統,以及讀CD的檔案系統。本節討論的是UFS。

我們可以把一個磁碟氛圍一個或者多個分割槽。每個分割槽可以包含一個檔案系統。如下如圖

i節點是固定長度的記錄項,它包含了有關檔案的大部分資訊。如果更仔細的觀察一個朱米娜的i節點和資料塊部分,則可以看到下圖所示的情況

注意上圖中下列各點:

  • 在上圖中有兩個目錄項指向了同一個i節點。每個i節點都有個一個連結計數,其值是指向改i節點的目錄項數。只有當連結計數減少至0的時候,才可以刪除該檔案。也就是可以釋放該檔案佔用的資料塊。這既是為什麼“解除對一個檔案的連結”操作並不總是意味著“釋放該檔案中擁有磁碟塊”的原因。這也是為什麼刪除一個目錄項的函式被稱為unlink而不是delete的原因。在stat結構中,連結計數包含在st_link成員中,其基本系統資料型別是nlink_t,這種連結為硬連結。LINK_MAX制定了一個檔案連線數的最大值。
  • 另外一種連線型別稱為符號連結。對於這種連結,該檔案的實際內容包含在該符號連結所指向的檔案的名字。在下列lrwxrwxrwx 1 root  7  time  lib->usr/lib該目錄項中的檔名是3個字串lib,而在該檔案中包含了7個數據位元組usr/lib該i節點中的檔案型別是S_IFLNK,於是系統指導這是一個符號連結。
  • i節點包含了大多數與檔案有關的資訊:檔案型別,檔案訪問許可權位,檔案長度和指向該檔案所用用的資料塊的指標等等。stat結構忠的大多數資訊都取自i節點。只有兩項資料存放在目錄項中,檔名字和i節點編號。i節點編號的資料型別是ino_t
  • 每個檔案系統各自對他們的i節點進行編號,因此木目錄項中的i節點編號數指向同一個檔案系統中的相應的i節點。不能是使一個目錄項指向另一個檔案系統的i節點。這就是為什麼ln(1)命令(構造一個指向一個向右檔案的新錄影)不能跨越檔案系統的原因。我們將在下一節說明link函式。
  • 當在不更換檔案系統情況下為一個檔案更名時候,該檔案的實際內容並未改動,只需構造一個指現有i節點的新目錄項,並解除與舊目錄項的連結。

我們說明了普通檔案的連結計數概念,但是對於目錄檔案的連結計數字段又如何呢?假定我們在工作目錄中構造了一個新目錄:如命令

mkdir testdir

下圖顯示了其結果。注意改圖顯示的顯示了.和..目錄項。

對於編號為2549的i節點,其型別欄位表示他是一個目錄,而連線計數為2.任何一個葉目錄的連線計數總是2,數值2來自於命名該目錄目錄項以及在該目錄忠的.項。對於編號為1267的i節點,器型別欄位表示她是一個目錄,二連線技術則大雨或等於3.他大雨或等於3的原因是,至少有三個目錄項指向他:一個是命名他的目錄項。第二個是該目錄中的.項第三個是在其子目錄的testdir中的..項注意,父目錄中的每一個子目錄都會是該目錄項的連結計數增1。