版權所有 © 2014 tutorialspoint
dup、dup2 - 複製檔案描述符
#include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd);
dup() 和 dup2() 建立檔案描述符 oldfd 的副本。
從 dup() 或 dup2() 成功返回後,可以互換使用舊檔案描述符和新檔案描述符。它們引用相同的檔案開啟描述符(參見 open(2)),因此共享檔案偏移量和檔案狀態標誌;例如,如果使用 lseek(2) 在其中一個描述符上修改檔案偏移量,則另一個描述符的偏移量也會發生更改。
這兩個描述符不共享檔案描述符標誌(close-on-exec 標誌)。複製描述符的 close-on-exec 標誌(FD_CLOEXEC;參見 fcntl(2))已關閉。
dup() 使用最低編號的未使用描述符作為新描述符。
dup2() 使 newfd 成為 oldfd 的副本,並在必要時先關閉 newfd。
當 newfd 超出範圍時,dup2() 返回的錯誤與 fcntl(..., F_DUPFD, ...) 返回的錯誤不同。在某些系統上,dup2() 有時也會像 F_DUPFD 一樣返回 EINVAL。
如果 newfd 已開啟,則在 close() 時可能報告的任何錯誤都將丟失。細心的程式設計師不會在不先關閉 newfd 的情況下使用 dup2()。
SVr4、4.3BSD、POSIX.1-2001。
close (2)
fcntl (2)
open (2)
廣告