linux中dup dup2 的學習總結

2021-07-03 12:06:41 字數 1262 閱讀 5017

1

、要了解dup()、dup2()的使用先要了解檔案描述符。檔案描述符是非負整數,是檔案的標識。使用者使用檔案描述符(file descriptor)來訪問檔案。

每個程序都有一張檔案描述符的表,程序剛被建立時,標準輸入、標準輸出、標準錯誤輸出裝置檔案被開啟,對應的檔案描述符0、1、2 記錄在表中。在程序中開啟其他檔案時,系統會返回檔案描述符表中最小可用的檔案描述符,並將此檔案描述符記錄在表中。

linux

中乙個程序最多只能開啟nr_open_default(即1024)個檔案,故當檔案不再使用時應及時呼叫close函式關閉檔案。 2

、了解了檔案描述符的概念,下面介紹函式:

dup和dup2是兩個非常有用的系統呼叫,都是用來複製乙個檔案的描述符,使新的檔案描述符也標識舊的檔案描述符所標識的檔案

。dup和dup2經常用來重定向程序的stdin、stdout和stderr。

1)int dup(int oldfd)

功能:複製oldfd檔案描述符,並分配乙個新的檔案描述符,新的檔案描述符是呼叫程序檔案描述符表中最小可用的檔案描述符。

引數:要複製的檔案描述符oldfd。

返回值:

成功:新檔案描述符。

失敗:返回-1,錯誤**存於errno中。 2

)int dup2(int oldfd, int newfd);

功能:複製乙份開啟的檔案描述符oldfd,並分配新的檔案描述符newfd,newfd也標識oldfd所標識的檔案。

注意:

newfd

是小於檔案描述符最大允許值的非負整數,如果newfd是乙個已經開啟的檔案描述符,則首先關閉該檔案,然後再複製。 3

、下面是**的測試、解析: 1

)dup()

int main()

2)dup2()

int main()

printf("fd2=%d,err=%d\n",fd2,err);

fd1=open("test_dup2",o_creat|o_rdwr,0777);

dup2(fd1,1);//

關閉1指向stdout,使1指向fd1的指向,即test檔案

printf("hello world\n");//

輸出到檔案描述符1,即檔案

dup2(fd2,1);//

關閉1指向test,使1指向fd2的指向(stdout)

printf("i am erlian\n");//

將輸出到stdout,預設螢幕

return 0; }

輸入輸出重定向 dup dup2

輸入重定向 將檔案匯入指定命令中 輸出重定向 將原本輸出開啟螢幕上資料資訊寫入到檔案當中 標準輸入重定向 stdin,檔案描述符為0 預設從鍵盤輸入,也可以從其他檔案或者命令中輸入 標準輸出重定向 stdout,檔案描述符為1 預設輸出到螢幕 標準輸出重定向符號 1 將標準輸出重定向到指定檔案中 清...

使用dup,dup2重定向的試驗

想在bash修改版 中得到執行使用者輸入命令後的回顯資料,沒調通。管道中沒有資料,應該是找到的fd不對。bash 執行使用者輸入的命令後,具體命令回顯用的是重定向。重定向用linuxc實現時,用的是dup和dup2.從頭做個試驗,體會一下dup和dup2的效果。本來可以在sshd 中嘗試得到回顯,因...

dup,dup2函式,複製檔案描述符

dup 和 dup2 都可以用來複製乙個現存的檔案描述符。經常用來重新定向程序的 stdin,stdout,stderr include int dup int oldfd int dup2 int oldfd,int newfd 這兩個函式我們可以用來複製檔案描述符。其中oldfd和newfd分別...