C語言下的FILE指針與Linux的文件描述符

FILE*:它是C庫中定義的一個結構體指針,我們在C語言文件操作時打開一個文件返回的指針類型就是它,在C庫中是這樣定義的,其中的_file它是一個整數,就是作爲文件索引的描述符,C庫是建立在系統調用上的,這個FILE結構體可以說是一個包裝,底層還是用文件描述符對磁盤上的文件進行連接的。

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/7E/A8/wKioL1cGa4jj0br-AACEdUK5Yb0974.png" title="無標題.png" width="800" height="370" border="0" hspace="0" vspace="0" style="width:800px;height:370px;" alt="wKioL1cGa4jj0br-AACEdUK5Yb0974.png" />

文件描述符:在linux系統中每打開一個文件就會獲取一個文件描述符,他是一個小整數,在linux下0號1號2號文件操作符分別是標準輸入,標準輸出,標準錯誤。

每個進程在運行時都會有個PCB,而PCB中都會有一張文件描述符表,這個表的索引便是文件描述符,而每個文件打開的時候,每個表項都會有個指向文件的指針,在linux內核中叫做file結構體,這個結構體中的每個指針都有着對文件操作的直接作用。

鏈接:

Linux鏈接分兩種,一種被稱爲硬鏈接(Hard Link),另一種被稱爲符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。

硬連接

硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱爲索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因爲對應該目錄的索引節點有一個以上的連接。只刪除一個連接並不影響索引節點本身和其它的連接,只有當最後一個連接被刪除後,文件的數據塊及目錄的連接纔會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。

軟連接

另外一種連接稱之爲符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似於Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。

inode:實際上就是系統中對文件標識的一個標識碼,他是一個結構體,前面說到的file結構體中有一個dentry結構體,這個結構體裏面便有一個指向inode結構體的指針,inode裏面有如下信息:

  * 文件的字節數

  * 文件擁有者的User ID

  * 文件的Group ID

  * 文件的讀、寫、執行權限

  * 文件的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時     間,atime指文件上一次打開的時間。

  * 鏈接數,即有多少文件名指向這個inode

  * 文件數據block的位置





本文出自 “痕跡” 博客,請務必保留此出處http://wpfbcr.blog.51cto.com/10696766/1761514

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章