如何在c中返回文件描述符
我對此感到困惑。
> > fp=fopen(文件名,模式); > > >
fopen() 返回fp的值是多少。該值是文件描述符整數嗎?
fp 被稱為流嗎?如果不是如何返回流?何時創建流?
如何使用c返回打開文件的文件描述符?
FILE 結構稱為 inode 表嗎?
fopen
是一個庫函式,它返回一個FILE
資料結構。(簡化)有關此結構的詳細資訊可在此頁面上找到。在這個結構的成員中有一個
char
稱為文件描述符。每次一個程序使用系統呼叫打開一個文件(就是這樣做的)時,就會在一個稱為*(全域)文件表*的核心內部表中創建一個條目 。fd``open``fopen
然後在另一個每個程序的表中創建另一個條目,稱為使用者文件描述符表。這個條目指向前一個條目(在核心文件表中),就像表中的任何條目一樣,它被賦予一個索引號。該索引是程序將其視為文件描述符的內容。
- 文件描述符 0 保留用於標準輸入。
- 文件描述符 1 保留用於標準輸出。
- 文件描述符 2 保留用於標準錯誤輸出。
出於這個原因,當你
open
在程序中第一次呼叫時,你很可能得到文件描述符 3。然後會出現 4,和 5,依此類推……然後,此文件描述符可用作您要對文件執行的每個操作(系統呼叫)的句柄 :
read
、write
和lseek
(close
釋放文件描述符)。您可以參考這些系統呼叫的手冊頁以獲取更多資訊。在此函式的手冊中找到庫函式使用的系統呼叫也很常見。例如,在 中man fopen
,您會看到:SEE ALSO open(2) ...
現在,流和inode的概念有些不同。第一個在 C 中純粹是概念性的:數據流是您使用
read
andwrite
系統呼叫對其進行的處理。另一方面,inode 編號與儲存管理的關聯比與文件訪問的關聯更大。在文件系統上,每個文件都與一個資料結構相關聯,儲存在文件系統的超級塊中。此資料結構(稱為 inode)包含有關文件的幾條元資訊,例如:
- 訪問時間
- 權限(模式)
- 所有權
- 類型(正常、目錄、字元、塊、管道……)
- 文件的連結(路徑)數
- 文件大小
這個 inode 還允許核心定位文件片段在磁碟上的位置。有關這方面的更多資訊,我建議您閱讀Maurice J.Bach的 The design on the UNIX operating system(第 4 章,第 1 節,“Inodes”)。您可能也對此感興趣。