dup函式詳解

2021-10-09 18:59:48 字數 1317 閱讀 6022

功能:複製檔案描述符,重定向輸入輸出。

函式:

#include

intdup

(int oldfd)

;int

dup2

(int oldfd,

int newfd)

;返回值:

成功:dup函式返回當前系統可用的最小整數值。

dup2函式返回第乙個不小於newfd的整數值,分兩種情況:

1. 如果newfd已經開啟,則先將其關閉,再複製檔案描述符;

2. 如果newfd等於oldfd,,則dup2函式返回newfd,而不關閉它。

失敗:dup和dup2函式均返回-

1,並設定errono。

複製檔案描述符後,新舊檔案描述符的特點:

使用dup或dup2複製檔案描述符後,新檔案描述符和舊檔案描述符指向同乙個檔案,共享檔案的鎖定、讀寫位置和各項許可權。

當關閉新的檔案描述符時,通過舊檔案描述符仍可操作檔案。

當關閉舊的檔案描述符時,通過新的檔案描述符仍可操作檔案。

注意:是共享檔案偏移量和檔案狀態標誌。

比如:其中乙個使用lseek修改檔案偏移量,另乙個也會改變(讀寫等操作位置會改變)。

/* 例子:複製檔案描述符,並向檔案寫資料 */

#include

#include

#include

#include

#include

void

main()

/* 開始複製 */

newfd =

dup(oldfd)

;printf

("newfd = %d\n"

, newfd)

;/* 使用oldfd寫 */

write

(oldfd, oldstr,

strlen

(oldstr));

if(close

(oldfd)==-

1)/* 使用newfd寫 */

write

(newfd, newstr,

strlen

(newstr));

if(close

(newfd)==-

1)exit(0

);}

執行結果:

終端輸出:

oldfd = 3

newfd = 4

檢視test.txt:

write by oldfd.

write by newfd.

注意:新舊檔案描述符是共享檔案讀寫位置。

Linux C dup和dup2函式詳解

系統呼叫dup 建立檔案描述符oldfd的乙個副本,使用編號最低的未使用描述符作為新描述符。成功返回後,新舊檔案描述符可以互換使用。它們引用相同的開啟檔案描述,因此共享檔案偏移量和檔案狀態標誌 例如,如果在其中乙個描述符上使用lseek 2 修改檔案偏移量,則另乙個描述符的偏移量也會更改。這兩個描述...

dup函式剖析

dup的作用是複製檔案控制代碼。為了能夠一睹dup的真身,不得不提到任務資料結構 就是我們常說的pcb結構。在linux核心中,此結構定義為struct task struct。task struct有乙個檔案結構指標陣列,陣列的元素個數就是程序能夠開啟的檔案控制代碼的數量最大值。當前程序開啟的每個...

12 dup函式和dup2函式

當呼叫dup函式時,核心在程序中建立乙個新的檔案描述符,該檔案描述符是當前可用檔案描述符的最小數值,這個檔案描述符指向oldfd所擁有的檔案表項。函式原型 include int dup int oldfd 引數說明 oldfd為已經開啟的檔案描述符 返回值 成功返回乙個新檔案描述符,失敗返回 1並...