C語言下的FILE指標與Linux的檔案描述符

2021-07-12 04:28:33 字數 1433 閱讀 8091

file*:它是c庫中定義的乙個結構體指標,我們在c語言檔案操作時開啟乙個檔案返回的指標型別就是它,在c庫中是這樣定義的,其中的_file它是乙個整數,就是作為檔案索引的描述符,c庫是建立在系統呼叫上的,這個file結構體可以說是乙個包裝,底層還是用檔案描述符對磁碟上的檔案進行連線的。

檔案描述符:在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的位置

本文出自 「痕跡」 部落格,請務必保留此出處

C語言下的位運算

簡介 程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的。位運算是直接對整數的二進位制位進行操作,簡便高效。下表列出了c語言的位運算子 名稱運算子 含義按位與 a b 僅1 1 1 按位或a b 僅0 0 0 按位異或 a b 對應數字上的數相同為0,不同為1 按位取反 a0和1全部取反 注意...

c語言下的檔案操作函式

這段時間整理c語言的檔案操作函式費了老大勁,太久沒接觸c語言,一開始寫起來很不順心,終於算是整理了一部分函式出來,可以告一段落了.但是還有一點bug,在對檔案進行寫入操作時,對於寫入資料的長度如果大於寫入字串本身長度的話,這時候該檔案的內容會多出一些莫名其妙的資料,希望遇到過此類問題的朋友告訴我原因...

C語言下的核心鍊錶

二.核心鍊錶 核心鍊錶是一種鍊錶,linux核心中的鍊錶都是用這種形式實現的 1.特性 核心鍊錶是一種雙向迴圈鍊錶,核心鍊錶的節點節點結構中只有指標域 使用核心鍊錶的時候,將核心鍊錶作為乙個成員放入到乙個結構體中使用 我們在鍊錶中找到核心鍊錶結構的位址,通過這個位址就可以找到外部大結構體的位址,通過...