1. 程式人生 > 其它 >檔案描述符與檔案指標的關係與區別

檔案描述符與檔案指標的關係與區別

  檔案指標是指向一個FILE的結構體,這個結構體裡包括一個檔案描述符(在Windows下也被稱為檔案控制代碼)和一個I/O緩衝區。檔案描述符用於C標準的IO庫呼叫中,用於標識檔案。FILE中包含檔案描述符元素,可以用fopen()直接獲取指標fp,然後使用fp獲得fp中所包含檔案描述符fd的資訊。檔案描述符應該是唯一的,而檔案指標卻不是唯一的,但指向的物件是唯一的。檔案指標比fd更適合跨平臺。

  檔案描述符就是open檔案時產生的一個很小的正整數,是一個索引值,它用於UNIX系統中,用於標識檔案。核心會為每一個執行中的程序在程序控制塊PCB中維護一個開啟檔案的記錄表,也就是檔案物件表,每一個表項都有一個指標指向開啟的檔案,上邊的索引值就是記錄表的索引值。如下圖所示:

  如上所示:已開啟的檔案在核心中用file結構體表示,檔案描述符表中的指標指向file結構體,file結構體才是核心中用來描述檔案屬性的結構體。

  C語言檔案指標域檔案描述符之間可以相互轉換:

int fileno(FILE * stream);
FILE * fdopen(int fd, const char * mode);
  FILE的結構如下:
typedef struct _iobuf FILE;
struct _iobuf {
        char *_ptr;          //緩衝區當前指標
        int   _cnt;
        char
*_base; //緩衝區基址 int _flag; //檔案讀寫模式 int _file; //檔案描述符 int _charbuf; //緩衝區剩餘自己個數 int _bufsiz; //緩衝區大小 char *_tmpfname; };

通常,一個程序啟動時,都會開啟3個檔案:

標準輸入:對應檔案描述符為0(STDIN_FILENO)

標準輸出:對應檔案描述符為1(STDOUT_FILENO)

標準出錯處理:對應檔案描述符為2(STDERR_FILENO)

這三個常數定義在標頭檔案<unistd.h>中

檔案描述符的範圍是0-OPEN_MAX。

用Linux的命令ulimit -n可檢視系統開啟檔案的數量(linux:1024)。

參考:https://blog.csdn.net/weixin_42904113/article/details/98595521

LightDB Enterprise Postgres--金融級關係型資料庫,更快、更穩、更懂金融!