版權所有 © 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)
廣告