版权所有 © 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)
广告