FILE結構體與檔案描述符

2021-08-02 02:29:29 字數 1079 閱讀 4771

首先解釋下為什麼要對這個結構體進行分析,我麼在進行c的學習時曾學習過這個file可以使用file*型別生成乙個指向檔案的指標,並且用於進行一系列檔案操作的傳值與接收。但對於file這個型別並沒有進行深究,那麼首先我們從題目可以知道這個我們熟悉的file型別其實是乙個結構體。既然是結構體,那麼就會有各個型別的成員變數,而這些成員必定各自儲存了一些資料,而我今天對其研究是因為,在linux學習過程中,遇到了程序的建立,其中有乙個概念名為檔案描述符。

核心(kernel)利用檔案描述符(file descriptor)來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。這裡使用科普中國的檔案描述符的定義。

當我們在今次那個程序建立時,每乙個程序會生成乙個檔案描述符表,並且建立子程序時,子程序也會生成乙個繼承父程序的檔案描述符表,當我們繼續研究這個檔案描述符表中的元素:檔案描述符時發現,其實每乙個檔案描述符即為檔案描述符表的下標,而檔案描述符表中儲存的則就是各個檔案在系統中的位址。

而檔案描述符的操作是各個對檔案操作的系統呼叫介面所必須的乙個引數,那麼我們暫且就可以大膽假設file中必定會有乙個成員是檔案的描述符,用於呼叫底層的系統呼叫介面,當然描述乙個檔案,乙個描述符還是不夠的。

不同的系統file結構體所在位置也各不相同,linux2.6.32版本下的file結構體在/user/include/libio.h中,並在/usr/include/stdio.h下對其進行重新命名為file

struct

_io_file ;

最後總計下檔案結構體與檔案描述符的區別:檔案描述符是在linux系統中開啟檔案就會獲得的很小的乙個正整數。每個程序在pcb(process control block)中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。而檔案指標則是在c語言中被使用來做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被稱為file結構的資料結構。file結構包括乙個緩衝區和乙個檔案描述符。而檔案描述符是檔案描述符表的乙個索引,因此從某種意義上說檔案指標就是控制代碼的控制代碼(在windows系統上,檔案描述符被稱作檔案控制代碼)。

Linux 檔案描述符fd與FILE結構體

在linux中不是用檔案指標來識別乙個檔案,而是用檔案描述符來識別的。檔案描述符簡稱fd,它是linux核心所建立的索引,目的就是為了高效管理已經被開啟的檔案。它是乙個非負整數,用來表示被開啟的檔案,而對該檔案所有的i o操作都是通過該檔案的檔案描述符來執行的。在乙個程式剛剛啟動時,系統就已經佔了三...

Linux 檔案描述符和FILE結構體

檔案描述符是乙個整數,用來標記每乙個的開啟的檔案和socket。第乙個開啟的檔案的檔案描述符是0,第二個是1.以此論推 在unix linux系統下,0號檔案對應的是標準輸入 stdin 1號檔案對應的是標準輸出 stdout 2號檔案對應的是標準錯誤 stderr 每個程序都在其pcb中儲存著乙份...

mysql 檔案描述符 檔案描述符

toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...