mirror of https://github.com/mkerrisk/man-pages
160 lines
4.0 KiB
Groff
160 lines
4.0 KiB
Groff
.\" Hey Emacs! This file is -*- nroff -*- source.
|
|
.\"
|
|
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
|
|
.\" and Copyright (C) 1993 Michael Haardt, Ian Jackson.
|
|
.\" and Copyright (C) 2005, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" 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
|
|
.\" 2009-01-12, mtk, reordered text in DESCRIPTION and added some
|
|
.\" details for dup2().
|
|
.\"
|
|
.TH DUP 2 2008-01-12 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
dup, dup2 \- duplicate a file descriptor
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <unistd.h>
|
|
.sp
|
|
.BI "int dup(int " oldfd );
|
|
.BI "int dup2(int " oldfd ", int " newfd );
|
|
.fi
|
|
.SH DESCRIPTION
|
|
.BR dup ()
|
|
and
|
|
.BR dup2 ()
|
|
create a copy of the file descriptor
|
|
.IR oldfd .
|
|
|
|
.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
|
|
.I oldfd
|
|
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
|
|
After a successful return from
|
|
.BR dup ()
|
|
or
|
|
.BR dup2 (),
|
|
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)
|
|
on one of the descriptors, the offset is also changed for the other.
|
|
|
|
The two descriptors do not share file descriptor flags
|
|
(the close-on-exec flag).
|
|
The close-on-exec flag
|
|
.RB ( FD_CLOEXEC ;
|
|
see
|
|
.BR fcntl (2))
|
|
for the duplicate descriptor is off.
|
|
.SH "RETURN VALUE"
|
|
.BR dup ()
|
|
and
|
|
.BR dup2 ()
|
|
return the new descriptor, or \-1 if an error occurred (in which case,
|
|
.I errno
|
|
is set appropriately).
|
|
.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
|
|
.BR dup2 ()
|
|
during a race condition with
|
|
.BR open (2)
|
|
and
|
|
.BR dup ().
|
|
.TP
|
|
.B EINTR
|
|
The
|
|
.BR dup2 ()
|
|
call was interrupted by a signal.
|
|
.TP
|
|
.B EMFILE
|
|
The process already has the maximum number of file
|
|
descriptors open and tried to open a new one.
|
|
.SH "CONFORMING TO"
|
|
SVr4, 4.3BSD, POSIX.1-2001.
|
|
.\" SVr4 documents additional
|
|
.\" EINTR and ENOLINK error conditions. POSIX.1 adds EINTR.
|
|
.\" The EBUSY return is Linux-specific.
|
|
.SH NOTES
|
|
The error returned by
|
|
.BR dup2 ()
|
|
is different from that returned by
|
|
.BR fcntl( "..., " F_DUPFD ", ..." )
|
|
when
|
|
.I newfd
|
|
is out of range.
|
|
On some systems
|
|
.BR dup2 ()
|
|
also sometimes returns
|
|
.B EINVAL
|
|
like
|
|
.BR F_DUPFD .
|
|
|
|
If
|
|
.I newfd
|
|
was open, any errors that would have been reported at
|
|
.BR close (2)
|
|
time are lost.
|
|
A careful programmer will not use
|
|
.BR dup2 ()
|
|
without closing
|
|
.I newfd
|
|
first.
|
|
.SH "SEE ALSO"
|
|
.BR close (2),
|
|
.BR fcntl (2),
|
|
.BR open (2)
|