Unix 下dup和dup2函式的解析

2021-05-21 18:36:34 字數 1011 閱讀 4742

函式原型:

#include

int dup(int filedes);

int dup2(int filedes,int filedes2);

apue上說dup返回最小的可用檔案描述符(最小的尚未開啟的檔案),對於dup2,我們指定新的檔案描述符引數為filedes2。

如果filedes2已經開啟,那麼它將先被關閉。

如果filedes2==filedes,那麼函式返回filedes2而不關閉該檔案。

通過上面的解釋我們可以知道:

1. dup返回的是最小可用檔案描述符,相當於開啟乙個新的檔案描述符,它的檔案表指標和引數filedes所對應的檔案表指標指向了同乙個檔案表;

2. dup2相當與將引數filedes2所指向的檔案表指標指向了filedes所指向的檔案表,所以引數filedes必須是乙個合法的開啟的檔案描述符。經過這樣處理後,對filedes2的操作就重定向到filedes了。

重定向:

下面例程完成的就是乙個「從標準輸出到檔案的重定向」,經過dup2後程序的任何目標為stdout_fileno的i/o操作如printf等,其資料都將流入fd所對應的檔案中。

intfd, fd2;  

mode_t fd_mode 

=s_irusr

|s_iwusr

|s_irgrp

|s_iroth;  

void

redir_stdout(

const

char

*filename)  

fd2=dup(stdout_fileno);說明fd2表示了標準輸出的乙個複製

如果我們想把剛剛定向到fd的輸出,再定向回標準輸出,可以用下面的**實現:

void

resume_stdout()  

//恢復輸出,把標準輸出定向到fd2,fd2代表的是標準輸出

注:例子**http://www.cnblogs.com/jht/archive/2006/04/04/366086.html

12 dup函式和dup2函式

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

Linux中dup函式和dup2函式

個人部落格傳送門 linux 中進行檔案描述符的重定向可以使用兩個函式 dup函式和dup2函式,其中還有乙個dup3函式,但是這個是linux後面版本新增的,不是所有的linux核心都支援,在這裡不討論。在linux系統中約定檔案描述符 0 1 2 對應標準輸入 標準輸出 標準錯誤,預設開啟。du...

重定向程式設計 dup和dup2函式

輸入重定向 關閉標準輸入裝置,開啟 或複製 某普通檔案,使其檔案描述符為0.輸出重定向 關閉標準輸出裝置,開啟 或複製 某普通檔案,使其檔案描述符為1.錯誤輸出重定向 關閉標準錯誤輸入裝置,開啟 或複製 某普通檔案,使其檔案描述符為2.1.dup函式 返回值 如成功則返回新的檔案描述符,否則出錯返回...