函式原型:
#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函式 返回值 如成功則返回新的檔案描述符,否則出錯返回...