檔案描述符是非負整數,是檔案的標識。
使用者使用檔案描述符(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;
}
案例1:使用dup函式複製檔案描述符:dup函式
1 #include
2 int dup(int oldfd)
;3 功能:複製oldfd檔案描述符,並分配乙個新的檔案描述符,新的檔案描述符是呼叫程序文
件描述符表中最小可用的檔案描述符。
4 引數:
5 要複製的檔案描述符oldfd。
6 返回值:
7 成功:新檔案描述符。
8 失敗:返回-1,錯誤**存於errno中。
案例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 開啟乙個檔案...