Linux 的世界,一切皆檔案

2021-10-19 18:36:12 字數 1705 閱讀 3794

linux 的世界,一切皆檔案

在linux的世界中,它會把一切都看作是檔案,包括普通檔案、目錄檔案、字元裝置(鍵盤、滑鼠等)、塊裝置(硬碟、光碟機等)、socket、epoll、socket、管道、終端等等,所有一切都抽象成了檔案,提供了統一的介面,用於程式呼叫。

linux 把一切視為檔案,那我們寫的程式是怎麼找到具體的某個檔案呢?

檔案描述符(file description fd)即為檔案的乙個標識,程式通過操作fd來操作檔案。

當應用程式請求核心開啟、新建乙個檔案時,核心就會返回乙個fd,使用者對應這個開啟、新建的檔案,其就是乙個非負整數。實際上,它是乙個表的索引值,指向核心為每個程序所維護的該程序開啟檔案的記錄表。

fd從0開始,但是0、1、2已經被固定使用了,再增加就是從3開始

簡單示意圖:

實際上關於檔案描述符,linux核心維護了3個資料結構:

檔案描述符表、開啟檔案表、inode表關係圖:

通過fd 找到開啟的檔案指標,再找到檔案偏移量+inode 指標,就可以找到i-node對應的真實檔案內容。

檔案描述符表核心對所有開啟的檔案維護乙個系統級別的開啟檔案描述表(open file description table)。表中的條目稱為開啟檔案描述體(open file description),乙個開啟的檔案相關資訊,包括:

檔案描述符是乙個重要的系統資源,理論上系統記憶體多大就應該可以開啟多少個檔案描述符,但是實際情況是,核心會有系統級限制,以及使用者級限制(不讓某乙個應用程式程序消耗掉所有的檔案資源,可以使用ulimit -n 檢視)

檔案描述符唯一:程序id + 檔案描述符id確認唯一

inode 是什麼?

理解inode,要從檔案儲存說起。

檔案儲存在硬碟上,硬碟的最小儲存單位叫做」扇區」(sector)。每個扇區儲存512位元組(相當於0.5kb)。

作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個」塊」(block)。這種由多個扇區組成的」塊」,是檔案訪問的最小單位。」塊」的大小,最常見的是4kb,即連續八個 sector組成乙個 block。

檔案資料都儲存在」塊」中,那麼很顯然,我們還必須找到乙個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為」索引節點」。

每乙個檔案都有對應的inode,裡面包含了與該檔案有關的一些資訊。

inode的內容

在linux系統中,檔案使用inode號來描述,inode儲存了檔案的很多元資訊。每個檔案系統會為儲存於其上的所有檔案(包括目錄)維護乙個i-node表

單個i-node包含以下資訊:

i-node儲存在磁碟裝置上,核心在記憶體中維護了乙個副本,這裡的i-node表為後者。副本除了原有資訊,還包括:引用計數、所在裝置號以及一些臨時屬性,

可以用stat命令,檢視某個檔案的inode資訊:stat test.txt

Linux 一切皆檔案

一切皆是檔案 是 unix linux 的基本哲學之一 不僅普通的檔案,目錄 字元裝置 塊裝置 套接字等在 unix linux 中都是以檔案被對待 它們雖然型別不同,但是對其提供的卻是同一套操作介面。檔案本質就是一種抽象,一般是指對資料的一種抽象。同時,檔案 也表示資料的儲存組織形式。資料庫就是另...

Linux 一切皆檔案

啟動乙個程序,需要乙個程式檔案,這是乙個二進位制檔案。啟動的時候,要載入一些配置檔案,例如 yml properties 等,這是文字檔案 啟動之後會列印一些日誌,如果寫到硬碟上,也是文字檔案。但是如果我想把日誌列印到互動控制台上,在命令列上唰唰地列印出來,這其實也是乙個檔案,是標準輸出 stdou...

linux一切皆是檔案 LINUX一切皆檔案

只要用過linux的筒子,或者保守點說接觸到一些linux思想的同志肯定聽說過這樣一句話,在linux下,一切皆是檔案 不錯,今天walfred將在快速上手linux裝置驅動這一塊,談談linux的裝置也符合 一切皆是檔案 的思想在linux裝置驅動模型應用。如果你不理解linux裝置模型,請看下面...