1、dup()
dup()系統呼叫會建立檔案描述符的乙個拷貝:
(1)新生成的檔案描述符是程序中最小的未使用的檔案描述符,0 、1 、2對應標準輸入、標準輸出、標準錯誤輸出
(2)如果拷貝成功,那麼原始的和拷貝的檔案描述符可能會交叉使用
(3)兩者都指向同乙個開啟的檔案描述符,因此共享檔案偏移量和檔案狀態標誌
語法:
int dup(int oldfd);oldfd:舊的檔案描述符的拷貝被建立例項如下:
#include#include #include int main()
2、dup2()
dup2()系統呼叫與dup類似,它們之間的基本不同在於dup2()不使用最小的未使用的檔案描述符編號,它使用指定的檔案描述符編號。
語法:
int dup2(int oldfd, int newfd);oldfd:old file descriptornewfdnew file descriptor which is used by dup2() to create a copy.關鍵點:
dup()和dup2()系統呼叫都要包含unistd.h標頭檔案
如果newfd描述符之間就開啟了,那麼在重用之前會被關閉
如果oldfd是非法的檔案描述符,則系統呼叫失敗,newfd也不會關閉
如果oldfd是有效的檔案描述符,newfd的值和oldfd的值相同,那麼dup2()什麼都不做,直接返回newfd
使用dup2()系統呼叫的小技巧:
因為newfd可以是任何的檔案描述符,以下的例項使用了c的標準輸出stdout。這能實現把printf語句的輸出寫到oldfd關聯的檔案中:
#include#include#include#includeint main()
printf的輸出會寫入tricky.txt中 dup與dup2系統呼叫
以下 摘自linux 0.11,雖然 已經過時,但是它的實現非常直觀,簡單,對於理解dup的實現有著很大的價值和幫助。通過這段 很容易理解dup背後的思想。複製檔案控制代碼 描述符 fs fcntl.c 引數fd 是欲複製的檔案控制代碼,arg 指定新檔案控制代碼的最小數值。返回新檔案控制代碼或出錯...
linux系統呼叫dup,dup2,dup3
翻譯自ubuntu下的linux programmer s manual dup,dup2,dup3 複製乙個檔案描述府。include int dup int oldfd int dup2 int oldfd,int newfd define gnu source 見 feature test m...
Linux中dup函式和dup2函式
個人部落格傳送門 linux 中進行檔案描述符的重定向可以使用兩個函式 dup函式和dup2函式,其中還有乙個dup3函式,但是這個是linux後面版本新增的,不是所有的linux核心都支援,在這裡不討論。在linux系統中約定檔案描述符 0 1 2 對應標準輸入 標準輸出 標準錯誤,預設開啟。du...