mysql 檔案描述符 檔案描述符

2021-10-18 10:16:31 字數 1384 閱讀 7120

[toc]

首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為:普通檔案、目錄檔案、鏈結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行i/o操作的系統呼叫都通過檔案描述符。程式剛剛啟動的時候,0是標準輸入,1是標準輸出,2是標準錯誤。如果此時去開啟乙個新的檔案,它的檔案描述符會是3。posix標準要求每次開啟檔案時(含socket)必須使用當前程序中最小可用的檔案描述符號碼,因此,在網路通訊過程中稍不注意就有可能造成串話。標準檔案描述符圖如下:

> 1. 檔案描述符是乙個大於零的整數,對應乙個開啟的檔案

> 2. 不同的檔案描述符可能對應同乙個檔案

> 3. 相同的檔案可以被不同的程序開啟也可以在同乙個程序中被多次開啟

> 4. 系統為每乙個程序維護了乙個檔案描述符表,該錶的值都是從0開始的,所以在不同的程序中你會看到相同的檔案描述符,這種情況下相同檔案描述符有可能指向同乙個檔案,也有可能指向不同的檔案。

> 5. 兩個不同的檔案描述符,若指向同乙個開啟檔案控制代碼,將共享同一檔案偏移量。因此,如果通過其中乙個檔案描述符來修改檔案偏移量(由呼叫read()、write()或lseek()所致),那麼從另乙個描述符中也會觀察到變化,無論這兩個檔案描述符是否屬於不同程序,還是同乙個程序,情況都是如此。

## 1. 描述符表

有三種表:

### 1.1程序級的檔案描述符表

程序級的描述符表的每一條目記錄了單個檔案描述符的相關資訊。

> 1. 控制檔案描述符操作的一組標誌。(目前,此類標誌僅定義了乙個,即close-on-exec標誌)

> 2. 對開啟檔案控制代碼的引用

### 1.2 系統級的開啟檔案描述符表

核心對所有開啟的檔案的檔案維護有乙個系統級的描述符**(open file description table)。有時,也稱之為開啟檔案表(open file table),並將**中各條目稱為開啟檔案控制代碼(open file handle)。乙個開啟檔案控制代碼儲存了與乙個開啟檔案相關的全部資訊,如下所示:

> 1. 當前檔案偏移量(呼叫read()和write()時更新,或使用lseek()直接修改)

> 2. 開啟檔案時所使用的狀態標識(即,open()的flags引數)

> 3. 檔案訪問模式(如呼叫open()時所設定的唯讀模式、只寫模式或讀寫模式)

> 4. 與訊號驅動相關的設定

> 5. 對該檔案i-node物件的引用

> 6. 檔案型別(例如:常規檔案、套接字或fifo)和訪問許可權

> 7. 乙個指標,指向該檔案所持有的鎖列表

> 8. 檔案的各種屬性,包括檔案大小以及與不同型別操作相關的時間戳

5. 檔案系統的i-node表

檔案描述符

檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...

檔案描述符

作業系統程序表中存放各個檔案進行檔案描述 核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。目錄檔案描述符概述 如何建立檔案描述符 使用的好處 缺點...

檔案描述符

檔案描述符是乙個簡單的整數,用以標明每乙個被程序所開啟的檔案和socket。第乙個開啟的檔案是0,第二個是1,依此類推。unix 作業系統通常給每個程序能開啟的檔案數量強加乙個限制。更甚的是,unix 通常有乙個系統級的限制。因為squid 的工作方式,檔案描述符的限制可能會極大的影響效能。當squ...