使用dup和dup2重定向和還原

2021-06-21 14:44:52 字數 1142 閱讀 5799

使用dup

和dup2

重定向和還原

源於開發乙個應用將資料寫的裝置節點中,但是裝置節點具有可變性,所以不在寫死,而是先確定好,開啟fd

再將內容寫進去,最終寫入

fd中的是乙個開源程式,沒有辦法傳遞

fd,不過它會把它要輸出的東西輸出到

stdout

中,開啟這個開源程式之前把

stdout

重定向到

fd上就可以完成了對接。鋪墊完了,下面就開始正題。

其實這個apue

上有講這個兩個函式,但是說的太標準了的書面語,也沒有給例子,就沒有辦法快速理解和使用了。看到乙個

10年前的好貼《

使用dup2

重定向了標準輸出後

,使用什麼方法恢復對終端的輸出

??-4

樓》解決了問題。完整**如下:

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

int main()

/* 重定向 */

if (-1 == dup2(testfd,stdout_fileno) )

/* 此時向stdout寫入應該輸出到檔案 */

write(stdout_fileno,"file\n",5);

/* 恢復stdout */

if (-1 != dup2(sfd,stdout_fileno) )

printf("gogogogogogo!\n");

close(testfd);

}

總結:重定向好似抗戰片中的將鐵軌移到別的路上,或者走向深谷/dev/null

,或者走向想讓其走的地方

fd。再說下,一開始以為我還以為dup2(stdout_fileno, stdout_fileno);

就恢復了呢,結果關閉fd

時候,顯示關閉成功,但是裝置卻再也打不開了,因為我並沒有真正還原。

使用dup和dup2重定向和還原

使用dup 和dup2 重定向和還原 源於開發乙個應用將資料寫的裝置節點中,但是裝置節點具有可變性,所以不在寫死,而是先確定好,開啟fd 再將內容寫進去,最終寫入 fd中的是乙個開源程式,沒有辦法傳遞 fd,不過它會把它要輸出的東西輸出到 stdout 中,開啟這個開源程式之前把 stdout 重定...

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

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

基礎知識 三 重定向dup和dup2

include int dup int oldfd int dup2 int oldfd,int newfd 當呼叫dup時,核心在程序中建立乙個新的檔案描述符,這個檔案描述符是現有可用檔案描述符中最小的,而且它指向的是oldfd所指向的檔案。而dup2不同的是,如果newfd已經開啟,則將其關閉,...