/*本文通過標準輸出的重定向和恢復的過程來解釋dup和dup2的使用方法*/
#include
#include
#include
//stdin_fileno標準輸入描述符(0)
//stdout_fileno標準輸出描述符(1)
//stderr_fileno標準錯誤描述符(2)
int main(void)
s_fd = dup(stdout_fileno);//檔案描述符的賦值此時s_fd和stdoout_fileno指向同乙個核心檔案表項
n_fd = dup2(fd, stdout_fileno);//標準輸出的重定向,此時程序檔案表項中stdout_fileno的檔案指標發生變化,變為和fd的檔案指標指向相同的乙個核心檔案表
//項,n_fd是新的檔案描述符,stdout_fileno(1)是對n_fd大小的設定
//注:n_fd和stdout_fielno是代表同乙個程序檔案表項
if(n_fd < 0)
write(stdout_fileno, "hello1", 6);//在dup.txt檔案中寫入六個位元組
dup2(s_fd, stdout_fileno);//對標準輸出重定向,此時程序檔案表項中stdout_fileno的檔案指標發生變化,和s_fd共享乙個核心表項,即恢復為原來的標準輸出
write(stdout_fileno, "hello2", 6);//在終端輸出6個位元組
Linux 系統呼叫 dup 和dup2
1 dup dup 系統呼叫會建立檔案描述符的乙個拷貝 1 新生成的檔案描述符是程序中最小的未使用的檔案描述符,0 1 2對應標準輸入 標準輸出 標準錯誤輸出 2 如果拷貝成功,那麼原始的和拷貝的檔案描述符可能會交叉使用 3 兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌 語法 ...
dup與dup2系統呼叫
以下 摘自linux 0.11,雖然 已經過時,但是它的實現非常直觀,簡單,對於理解dup的實現有著很大的價值和幫助。通過這段 很容易理解dup背後的思想。複製檔案控制代碼 描述符 fs fcntl.c 引數fd 是欲複製的檔案控制代碼,arg 指定新檔案控制代碼的最小數值。返回新檔案控制代碼或出錯...
使用dup和dup2重定向和還原
使用dup 和dup2 重定向和還原 源於開發乙個應用將資料寫的裝置節點中,但是裝置節點具有可變性,所以不在寫死,而是先確定好,開啟fd 再將內容寫進去,最終寫入 fd中的是乙個開源程式,沒有辦法傳遞 fd,不過它會把它要輸出的東西輸出到 stdout 中,開啟這個開源程式之前把 stdout 重定...