2004-11-03 13:51:07 +00:00
|
|
|
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
|
|
.\"
|
|
|
|
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
|
2008-01-12 13:19:03 +00:00
|
|
|
.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
|
|
|
|
.\" and Copyright (C) 2005, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
|
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
|
|
.\" preserved on all copies.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
|
|
.\" permission notice identical to this one.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
|
|
.\" have taken the same level of care in the production of this manual,
|
|
|
|
.\" which is licensed free of charge, as they might when working
|
|
|
|
.\" professionally.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
|
|
.\"
|
|
|
|
.\" Modified 1993-07-21, Rik Faith <faith@cs.unc.edu>
|
|
|
|
.\" Modified 1994-08-21, Michael Chastain <mec@shell.portal.com>:
|
|
|
|
.\" Fixed typoes.
|
|
|
|
.\" Modified 1997-01-31, Eric S. Raymond <esr@thyrsus.com>
|
|
|
|
.\" Modified 2002-09-28, aeb
|
2008-01-12 13:19:03 +00:00
|
|
|
.\" 2009-01-12, mtk, reordered text in DESCRIPTION and added some
|
|
|
|
.\" details for dup2().
|
2008-10-09 13:06:19 +00:00
|
|
|
.\" 2008-10-09, mtk: add description of dup3()
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
accept.2, clone.2, dup.2, fallocate.2, pipe.2, readahead.2, sched_setaffinity.2, unshare.2, CPU_SET.3, endian.3, euidaccess.3, fexecve.3, getpt.3, getpw.3, getumask.3, getutmp.3, gnu_get_libc_version.3, makedev.3, matherr.3, mbsnrtowcs.3, memfrob.3, pthread_attr_setaffinity_np.3, pthread_getattr_np.3, pthread_setaffinity_np.3, pthread_tryjoin_np.3, tcgetsid.3, wcscasecmp.3, wcsncasecmp.3, wcsnlen.3, wcsnrtombs.3, wcswidth.3, rtld-audit.7: SYNOPSIS: Add reference to feature_test_macros(7)
These pages specify feature test macros in the function
prototypes. Add a reference to feature_test_macros(7),
so that readers are pointed to the information that
feature test macros must be defined before including
*any* header file.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-09-10 05:06:22 +00:00
|
|
|
.TH DUP 2 2010-09-10 "Linux" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
2008-10-09 13:06:19 +00:00
|
|
|
dup, dup2, dup3 \- duplicate a file descriptor
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH SYNOPSIS
|
|
|
|
.nf
|
|
|
|
.B #include <unistd.h>
|
|
|
|
.sp
|
|
|
|
.BI "int dup(int " oldfd );
|
|
|
|
.BI "int dup2(int " oldfd ", int " newfd );
|
2008-10-09 13:06:19 +00:00
|
|
|
.sp
|
accept.2, clone.2, dup.2, fallocate.2, pipe.2, readahead.2, sched_setaffinity.2, unshare.2, CPU_SET.3, endian.3, euidaccess.3, fexecve.3, getpt.3, getpw.3, getumask.3, getutmp.3, gnu_get_libc_version.3, makedev.3, matherr.3, mbsnrtowcs.3, memfrob.3, pthread_attr_setaffinity_np.3, pthread_getattr_np.3, pthread_setaffinity_np.3, pthread_tryjoin_np.3, tcgetsid.3, wcscasecmp.3, wcsncasecmp.3, wcsnlen.3, wcsnrtombs.3, wcswidth.3, rtld-audit.7: SYNOPSIS: Add reference to feature_test_macros(7)
These pages specify feature test macros in the function
prototypes. Add a reference to feature_test_macros(7),
so that readers are pointed to the information that
feature test macros must be defined before including
*any* header file.
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
2010-09-10 05:06:22 +00:00
|
|
|
.BR "#define _GNU_SOURCE" " /* See feature_test_macros(7) */"
|
2008-10-09 13:06:19 +00:00
|
|
|
.B #include <unistd.h>
|
|
|
|
.sp
|
|
|
|
.BI "int dup3(int " oldfd ", int " newfd ", int " flags );
|
2004-11-03 13:51:07 +00:00
|
|
|
.fi
|
|
|
|
.SH DESCRIPTION
|
2008-10-31 01:43:16 +00:00
|
|
|
These system calls create a copy of the file descriptor
|
2004-11-03 13:51:07 +00:00
|
|
|
.IR oldfd .
|
|
|
|
|
2008-01-12 13:19:03 +00:00
|
|
|
.BR dup ()
|
|
|
|
uses the lowest-numbered unused descriptor for the new descriptor.
|
|
|
|
|
|
|
|
.BR dup2 ()
|
|
|
|
.RI "makes " newfd " be the copy of " oldfd ", closing " newfd
|
|
|
|
first if necessary, but note the following:
|
|
|
|
.IP * 3
|
|
|
|
If
|
2008-04-13 20:03:28 +00:00
|
|
|
.I oldfd
|
2008-01-12 13:19:03 +00:00
|
|
|
is not a valid file descriptor, then the call fails, and
|
|
|
|
.I newfd
|
|
|
|
is not closed.
|
|
|
|
.IP *
|
|
|
|
If
|
|
|
|
.I oldfd
|
|
|
|
is a valid file descriptor, and
|
|
|
|
.I newfd
|
|
|
|
has the same value as
|
|
|
|
.IR oldfd ,
|
|
|
|
then
|
|
|
|
.BR dup2 ()
|
|
|
|
does nothing, and returns
|
|
|
|
.IR newfd .
|
|
|
|
.PP
|
2008-10-09 13:06:19 +00:00
|
|
|
After a successful return from one of these system calls,
|
2005-06-22 09:53:00 +00:00
|
|
|
the old and new file descriptors may be used interchangeably.
|
|
|
|
They refer to the same open file description (see
|
|
|
|
.BR open (2))
|
|
|
|
and thus share file offset and file status flags;
|
|
|
|
for example, if the file offset is modified by using
|
|
|
|
.BR lseek (2)
|
2005-06-27 14:42:14 +00:00
|
|
|
on one of the descriptors, the offset is also changed for the other.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2005-06-22 09:53:00 +00:00
|
|
|
The two descriptors do not share file descriptor flags
|
|
|
|
(the close-on-exec flag).
|
2007-04-12 22:42:49 +00:00
|
|
|
The close-on-exec flag
|
|
|
|
.RB ( FD_CLOEXEC ;
|
2005-06-22 09:53:00 +00:00
|
|
|
see
|
|
|
|
.BR fcntl (2))
|
|
|
|
for the duplicate descriptor is off.
|
2008-10-09 13:06:19 +00:00
|
|
|
|
|
|
|
.BR dup3 ()
|
|
|
|
is the same as
|
|
|
|
.BR dup2 (),
|
|
|
|
except that:
|
|
|
|
.IP * 3
|
|
|
|
The caller can force the close-on-exec flag to be set
|
|
|
|
for the new file descriptor by specifying
|
|
|
|
.BR O_CLOEXEC
|
|
|
|
in
|
|
|
|
.IR flags .
|
2008-10-10 05:56:38 +00:00
|
|
|
See the description of the same flag in
|
|
|
|
.BR open (2)
|
|
|
|
for reasons why this may be useful.
|
2008-10-09 13:06:19 +00:00
|
|
|
.IP *
|
|
|
|
.\" FIXME . To confirm with Al Viro that this was intended, and its rationale
|
|
|
|
If
|
|
|
|
.IR oldfd
|
|
|
|
equals
|
|
|
|
.IR newfd ,
|
|
|
|
then
|
|
|
|
.BR dup3 ()
|
|
|
|
fails with the error
|
|
|
|
.BR EINVAL .
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH "RETURN VALUE"
|
2008-10-09 13:06:19 +00:00
|
|
|
On success, these system calls
|
|
|
|
return the new descriptor.
|
2008-10-11 04:47:32 +00:00
|
|
|
On error, \-1 is returned, and
|
2004-11-03 13:51:07 +00:00
|
|
|
.I errno
|
2008-10-09 13:06:19 +00:00
|
|
|
is set appropriately.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EBADF
|
|
|
|
.I oldfd
|
|
|
|
isn't an open file descriptor, or
|
|
|
|
.I newfd
|
|
|
|
is out of the allowed range for file descriptors.
|
|
|
|
.TP
|
|
|
|
.B EBUSY
|
|
|
|
(Linux only) This may be returned by
|
2005-06-22 09:53:00 +00:00
|
|
|
.BR dup2 ()
|
2008-10-09 13:06:19 +00:00
|
|
|
or
|
|
|
|
.BR dup3 ()
|
2005-10-19 14:16:57 +00:00
|
|
|
during a race condition with
|
2007-05-11 23:07:02 +00:00
|
|
|
.BR open (2)
|
2007-04-12 22:42:49 +00:00
|
|
|
and
|
2005-10-19 14:16:57 +00:00
|
|
|
.BR dup ().
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
|
|
|
.B EINTR
|
|
|
|
The
|
2005-06-22 09:53:00 +00:00
|
|
|
.BR dup2 ()
|
2008-10-29 20:43:44 +00:00
|
|
|
or
|
2008-10-09 13:06:19 +00:00
|
|
|
.BR dup3 ()
|
2008-07-07 04:40:49 +00:00
|
|
|
call was interrupted by a signal; see
|
|
|
|
.BR signal (7).
|
2004-11-03 13:51:07 +00:00
|
|
|
.TP
|
2008-10-09 13:06:19 +00:00
|
|
|
.B EINVAL
|
|
|
|
.RB ( dup3 ())
|
|
|
|
.I flags
|
|
|
|
contain an invalid value.
|
|
|
|
.\" FIXME . To confirm with Al Viro that this was intended, and its rationale
|
|
|
|
Or,
|
|
|
|
.I oldfd
|
|
|
|
was equal to
|
|
|
|
.IR newfd .
|
|
|
|
.TP
|
2004-11-03 13:51:07 +00:00
|
|
|
.B EMFILE
|
|
|
|
The process already has the maximum number of file
|
|
|
|
descriptors open and tried to open a new one.
|
2008-10-09 13:06:19 +00:00
|
|
|
.SH VERSIONS
|
|
|
|
.BR dup3 ()
|
|
|
|
was added to Linux in version 2.6.27;
|
|
|
|
glibc support is available starting with
|
|
|
|
version 2.9.
|
2007-05-18 16:06:42 +00:00
|
|
|
.SH "CONFORMING TO"
|
2008-10-09 13:06:19 +00:00
|
|
|
.BR dup (),
|
|
|
|
.BR dup2 ():
|
2007-05-18 16:06:42 +00:00
|
|
|
SVr4, 4.3BSD, POSIX.1-2001.
|
2008-10-09 13:06:19 +00:00
|
|
|
|
|
|
|
.BR dup3 ()
|
|
|
|
is Linux-specific.
|
2007-05-18 16:06:42 +00:00
|
|
|
.\" SVr4 documents additional
|
|
|
|
.\" EINTR and ENOLINK error conditions. POSIX.1 adds EINTR.
|
2007-12-25 21:28:09 +00:00
|
|
|
.\" The EBUSY return is Linux-specific.
|
2007-05-16 02:41:02 +00:00
|
|
|
.SH NOTES
|
2004-11-03 13:51:07 +00:00
|
|
|
The error returned by
|
2005-06-22 09:53:00 +00:00
|
|
|
.BR dup2 ()
|
2004-11-03 13:51:07 +00:00
|
|
|
is different from that returned by
|
|
|
|
.BR fcntl( "..., " F_DUPFD ", ..." )
|
|
|
|
when
|
|
|
|
.I newfd
|
2007-04-12 22:42:49 +00:00
|
|
|
is out of range.
|
|
|
|
On some systems
|
2005-06-22 09:53:00 +00:00
|
|
|
.BR dup2 ()
|
2004-11-03 13:51:07 +00:00
|
|
|
also sometimes returns
|
|
|
|
.B EINVAL
|
|
|
|
like
|
|
|
|
.BR F_DUPFD .
|
2005-06-22 09:53:00 +00:00
|
|
|
|
2004-11-03 13:51:07 +00:00
|
|
|
If
|
|
|
|
.I newfd
|
|
|
|
was open, any errors that would have been reported at
|
2007-05-11 23:07:02 +00:00
|
|
|
.BR close (2)
|
2008-01-12 13:19:03 +00:00
|
|
|
time are lost.
|
2007-04-12 22:42:49 +00:00
|
|
|
A careful programmer will not use
|
2005-06-22 09:53:00 +00:00
|
|
|
.BR dup2 ()
|
2008-10-09 13:06:19 +00:00
|
|
|
or
|
|
|
|
.BR dup3 ()
|
2004-11-03 13:51:07 +00:00
|
|
|
without closing
|
|
|
|
.I newfd
|
|
|
|
first.
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR close (2),
|
|
|
|
.BR fcntl (2),
|
|
|
|
.BR open (2)
|