檔案描述符概述

2021-10-10 19:16:17 字數 2953 閱讀 6606

檔案描述符是非負整數,是檔案的標識。

使用者使用檔案描述符(file descriptor)來訪問檔案。

利用open開啟乙個檔案時,核心會返回乙個檔案描述符。

每個程序都有一張檔案描述符的表,程序剛被建立時,標準輸入、標準輸出、標準錯誤輸出裝置檔案被開啟,對應的檔案描述符0、1、2 記錄在表中。

在程序中開啟其他檔案時,系統會返回檔案描述符表中最小可用的檔案描述符,並將此檔案描述符記錄在表中。

注意:

linux中乙個程序最多只能開啟nr_open_default(即1024)個檔案,故當檔案不再使用時應及時呼叫close函式關閉檔案。

案例:

#include

#include

#include

#include

#include

#include

intmain

(int argc,

char

const

*ar**)

printf

("fd = %d\n"

, fd);}

return0;

}

檔案描述符的複製:

dup函式

1 #include

2 int dup(int oldfd)

;3 功能:複製oldfd檔案描述符,並分配乙個新的檔案描述符,新的檔案描述符是呼叫程序文

件描述符表中最小可用的檔案描述符。

4 引數:

5 要複製的檔案描述符oldfd。

6 返回值:

7 成功:新檔案描述符。

8 失敗:返回-1,錯誤**存於errno中。

案例1:使用dup函式複製檔案描述符:

案例2:實現輸出重定向的功能

案例3:實現輸出重定向後,還想標準輸出,如何實現:

dup2函式

1 #include

2 int dup2(int oldfd, int newfd)

3 功能:複製乙份開啟的檔案描述符oldfd,

4 並分配新的檔案描述符newfd,newfd也標識oldfd所標識的檔案。

5 注意:

6 newfd是小於檔案描述符最大允許值的非負整數,

7 如果newfd是乙個已經開啟的檔案描述符,則首先關閉該檔案,然後再複製。

8 引數:

9 oldfd:要複製的檔案描述符

10 newfd:分配的新的檔案描述符

11 返回值:

12 成功:返回newfd

13 失敗:返回‐1,錯誤**存於errno中

實現輸出重定向:

#include

#include

#include

#include

#include

#include

intmain

(void

)//首先關閉1檔案描述符,然後將fd1複製給1,意味著1和fd1都標識test.txt檔案,返回值跟1是一樣的

實現輸出重定向後,再恢復標準輸出:

檔案描述符概述

檔案描述符概述 核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。習慣上,標準輸入 standard input 的檔案描述符是 0,標準輸出 st...

mysql 檔案描述符 檔案描述符

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

檔案描述符

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