dup3 — duplicate
an existing file descriptor
Standard C Library (libc, -lc)
#include <fcntl.h>
#include <unistd.h>
int
dup3(int
oldd, int newd,
int flags);
The
dup3()
function duplicates an existing object descriptor while allowing the value
of the new descriptor to be specified.
The close-on-exec flag on the new file descriptor is determined by
the O_CLOEXEC bit in
flags.
If oldd ≠ newd
and flags == 0, the behavior is identical to
dup2(oldd, newd).
If oldd ==
newd, then
dup3()
fails, unlike
dup2(2).
The value -1 is returned if an error occurs. The external variable
errno indicates the cause of the error.
The dup3() function fails if:
- [
EBADF]
- The oldd argument is not a valid active descriptor
or the newd argument is negative or exceeds the
maximum allowable descriptor number
- [
EINVAL]
- The oldd argument is equal to the
newd argument.
- [
EINVAL]
- The flags argument has bits set other than
O_CLOEXEC.
The dup3() function does not conform to
any standard.
The dup3() function appeared in
FreeBSD 10.0.