3 12 檔案I O dup和dup2函式

2021-05-23 06:09:15 字數 419 閱讀 2129

下面兩個函式都可用來複製乙個現存的檔案描述符:

返回值:成功返回新的檔案描述符,出錯返回-1

有dup返回的新檔案描述符一定是當前可用檔案描述符的最小數值。用dup2則可以用filedes2引數指定新描述符的數值。如果filedes2已經開啟,則先將其關閉。如若filedes等於filedes2,則dup2返回filedes2,而不關閉它。

這些函式返回的新檔案描述符與引數filedes共享同乙個檔案表項:

圖3.3 執行dup(1)後的核心資料結構

每個檔案描述符都有它自己的一套檔案描述符標誌。例如,新描述符的執行時關閉(close-on-exec)標誌總是有dup函式清除。

複製乙個描述符的另一種方法是使用fcntl函式。實際上,

在後一種情況下,dup2並不完全等同於close加上fcntl。它們之間的區別是:

複製檔案描述符dup和dup2

檔案描述符的複製 dup和dup2是兩個非常有用的系統呼叫,都是用來複製乙個檔案的描述符,使新的檔案描述符也標識舊的檔案描述符所標識的檔案。int dup int oldfd int dup2 int oldfd,int newfd dup和dup2經常用來重定向程序的stdin,stdout和st...

Linux 系統呼叫 dup 和dup2

1 dup dup 系統呼叫會建立檔案描述符的乙個拷貝 1 新生成的檔案描述符是程序中最小的未使用的檔案描述符,0 1 2對應標準輸入 標準輸出 標準錯誤輸出 2 如果拷貝成功,那麼原始的和拷貝的檔案描述符可能會交叉使用 3 兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌 語法 ...

dup和dup2的使用方法

本文通過標準輸出的重定向和恢復的過程來解釋dup和dup2的使用方法 include include include stdin fileno標準輸入描述符 0 stdout fileno標準輸出描述符 1 stderr fileno標準錯誤描述符 2 int main void s fd dup ...