dup 和 dup2 都可以用來複製乙個現存的檔案描述符。經常用來重新定向程序的 stdin,stdout,stderr
#include
int dup(int oldfd);
int dup2(int oldfd, int newfd);
這兩個函式我們可以用來複製檔案描述符。
其中oldfd和newfd分別是複製前的檔案描述符和複製後的檔案描述符。
這兩個函式的呼叫都複製檔案描述符oldfd,且返回值都為新的檔案描述符。
不同點是:dup()的返回值是最小的未用檔案描述符;dup2()的返回值是預先指定的檔案描述符newfd。
對於dup2(),如果檔案描述符newfd正在被使用,則先關閉newfd;如果newfd同oldfd,則不關閉該檔案正常返回。
了解一下檔案描述符在核心中的形態.
乙個程序在存在期間,會有一些檔案被開啟,從而會返回一些檔案描述符,從shell中執行乙個程序,缺省會有3個檔案描述符存在(0、1、2)
0與程序的標準輸入相關聯
1與程序的標準輸出相關聯
2與程序的標準錯誤輸出相關聯
檔案描述符的重定向 dup dup2
dup dup2 進行檔案描述符的重定向即建立乙個oldfd的副本。dup 最低編號 未被使用的檔案描述符是oldfd的乙份拷貝。dup2 newfd是oldfd的乙份拷貝。返回值 成功 newfd 失敗 1 基於tcp的socket程式設計 以基於tcp的socket程式設計中的多執行緒伺服器為例...
使用dup dup2進行檔案描述符重定向
當乙個程序執行時,會有相應的檔案描述符 linux一切皆檔案 一般會有3個預設的檔案描述符 0 與標準輸入關聯 1 與標準輸出關聯 2 與標準錯誤輸出關聯 dup dup2函式,對檔案描述符重定向 close 1 關閉要重定向的檔案描述符 dup fd,1 將標準輸出重定向到開啟的檔案 dup2 f...
linux中dup dup2 的學習總結
1 要了解dup dup2 的使用先要了解檔案描述符。檔案描述符是非負整數,是檔案的標識。使用者使用檔案描述符 file descriptor 來訪問檔案。每個程序都有一張檔案描述符的表,程序剛被建立時,標準輸入 標準輸出 標準錯誤輸出裝置檔案被開啟,對應的檔案描述符0 1 2 記錄在表中。在程序中...