以下**摘自linux 0.11,雖然**已經過時,但是它的實現非常直觀,簡單,對於理解dup的實現有著很大的價值和幫助。通過這段**,很容易理解dup背後的思想。
//// 複製檔案控制代碼(描述符)。
——fs/fcntl.c
//引數fd 是欲複製的檔案控制代碼,arg 指定新檔案控制代碼的最小數值。
//返回新檔案控制代碼或出錯碼。
static
intdupfd (unsigned
intfd, unsigned
intarg)
//// 複製檔案控制代碼系統呼叫函式。
//複製指定檔案控制代碼oldfd,新控制代碼值等於newfd。如果newfd 已經開啟,則首先關閉之。
intsys_dup2 (unsigned
intoldfd, unsigned
intnewfd)
//// 複製檔案控制代碼系統呼叫函式。
//複製指定檔案控制代碼oldfd,新控制代碼的值是當前最小的未用控制代碼。
intsys_dup (unsigned
intfildes)
Linux 系統呼叫 dup 和dup2
1 dup dup 系統呼叫會建立檔案描述符的乙個拷貝 1 新生成的檔案描述符是程序中最小的未使用的檔案描述符,0 1 2對應標準輸入 標準輸出 標準錯誤輸出 2 如果拷貝成功,那麼原始的和拷貝的檔案描述符可能會交叉使用 3 兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌 語法 ...
dup2 功能實現
用dup 來返回檔案描述符,直到符合要求的為止,最後再把不符合要求的關閉 當輸入的描述符是負的或者已超過max open時,會出錯 include dup include include define open max 256 int my dup2 int,int int main int arg...
dup和dup2的使用方法
本文通過標準輸出的重定向和恢復的過程來解釋dup和dup2的使用方法 include include include stdin fileno標準輸入描述符 0 stdout fileno標準輸出描述符 1 stderr fileno標準錯誤描述符 2 int main void s fd dup ...