使用dup
和dup2
重定向和還原
源於開發乙個應用將資料寫的裝置節點中,但是裝置節點具有可變性,所以不在寫死,而是先確定好,開啟fd
再將內容寫進去,最終寫入
fd中的是乙個開源程式,沒有辦法傳遞
fd,不過它會把它要輸出的東西輸出到
stdout
中,開啟這個開源程式之前把
stdout
重定向到
fd上就可以完成了對接。鋪墊完了,下面就開始正題。
其實這個apue
上有講這個兩個函式,但是說的太標準了的書面語,也沒有給例子,就沒有辦法快速理解和使用了。看到乙個
10年前的好貼《
使用dup2
重定向了標準輸出後
,使用什麼方法恢復對終端的輸出
??-4
樓》解決了問題。完整**如下:
[cpp]view plain
copy
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
intmain()
/* 重定向 */
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已經開啟,則將其關閉,...