檔案指標和檔案描述符

2021-06-11 06:37:15 字數 1000 閱讀 2651

[原文**:

檔案描述符:在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔案,開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb(process control block)中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。檔案描述符的優點:相容posix標準,許多linux和unix系統呼叫都依賴於它。檔案描述符的缺點:不能移植到unix以外的系統上去,也不直觀。

檔案指標:c語言中使用的是檔案指標而不是檔案描述符做為i/o的控制代碼。檔案指標指向程序使用者區中的乙個被稱為file結構的資料結構。file結構包括乙個緩衝區和乙個檔案描述符。而檔案描述符是檔案描述符表的乙個索引,因此從某種意義上說檔案指標就是控制代碼的控制代碼(在windows系統上,檔案描述符被稱作檔案控制代碼)。file *中除了包含了fd資訊,還包含了io緩衝,是c標準形式,所以file *比fd更適合跨平台,應該多用fopen在,少用open。

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

這要通過fdopen和fileno兩個函式實現。它們都包含在標頭檔案stdio.h中。

fdopen的原型: file * fdopen(int filedes, const char *opentype);

第乙個引數filedes是乙個開啟的檔案描述符,opentype是表示開啟方式的字串,和fopen函式具有相同的取值,比如"w"或"w+"等。但是你必須保證該字串的描述和檔案實際的開啟方式是匹配的。函式fopen()就是返回開啟檔案的指標;如果操作失敗,返回空指標null。

把檔案流指標轉換成檔案描述符用fileno函式,其原型為:

int fileno(file *stream);

它返回和stream檔案流對應的檔案描述符。如果失敗,返回-1。

當程式執行時,就已經有三個檔案流開啟了,它們分別是標準輸入stdin,標準輸出stdout和標準錯誤輸出stderr。和流式檔案相對應的是,也有三個檔案描述符被預先開啟,它們分別是0,1,2,代表標準輸入、標準輸出和標準錯誤輸出。

檔案指標和檔案描述符

檔案描述符 在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔案,開啟檔案就會獲得檔案描述符,它是個很小的正整數。每個程序在pcb process control block 中儲存著乙份檔案描述符表,檔案描述符就是這個表的索引,每個表項都有乙個指向已開啟檔案的指標。...

Linux 檔案描述符和檔案指標

一 檔案描述符 1 概念 在linux下一切皆檔案的思想,檔案被分為普通檔案,目錄檔案,鏈結檔案和裝置檔案。檔案描述符是核心為了高效管理已被開啟的檔案所建立的索引,它是乙個非負整數,用於指代被開啟的檔案,所有執行i o操作的系統呼叫都要通過檔案描述符。程式剛啟動的時候,0,1,2分別表示標準輸入,標...

檔案描述符和檔案指標區別

int fileno file stream 返回stream對應的檔案描述符。file fdopen int filedes,const char mode 從檔案描述符fd 到檔案流 file 的函式 檔案描述符,在linux系統中,裝置也是以檔案的形式存在,要對該裝置進行操作就必須先開啟這個檔...