xref: /dragonfly/lib/libc/sys/dup.2 (revision 6a3cbbc2)
1.\" Copyright (c) 1980, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. Neither the name of the University nor the names of its contributors
13.\"    may be used to endorse or promote products derived from this software
14.\"    without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.\"     @(#)dup.2	8.1 (Berkeley) 6/4/93
29.\" $FreeBSD: src/lib/libc/sys/dup.2,v 1.9.2.6 2001/12/14 18:34:00 ru Exp $
30.\"
31.Dd May 6, 2019
32.Dt DUP 2
33.Os
34.Sh NAME
35.Nm dup ,
36.Nm dup2
37.Nd duplicate an existing file descriptor
38.Sh LIBRARY
39.Lb libc
40.Sh SYNOPSIS
41.In unistd.h
42.Ft int
43.Fn dup "int oldd"
44.Ft int
45.Fn dup2 "int oldd" "int newd"
46.Sh DESCRIPTION
47.Fn Dup
48duplicates an existing object descriptor and returns its value to
49the calling process
50.Fa ( newd
51=
52.Fn dup oldd ) .
53The argument
54.Fa oldd
55is a small non-negative integer index in
56the per-process descriptor table.  The value must be less
57than the size of the table, which is returned by
58.Xr getdtablesize 2 .
59The new descriptor returned by the call
60is the lowest numbered descriptor
61currently not in use by the process.
62.Pp
63The object referenced by the descriptor does not distinguish
64between
65.Fa oldd
66and
67.Fa newd
68in any way.
69Thus if
70.Fa newd
71and
72.Fa oldd
73are duplicate references to an open
74file,
75.Xr read 2 ,
76.Xr write 2
77and
78.Xr lseek 2
79calls all move a single pointer into the file,
80and append mode, non-blocking I/O and asynchronous I/O options
81are shared between the references.
82If a separate pointer into the file is desired, a different
83object reference to the file must be obtained by issuing an
84additional
85.Xr open 2
86call.
87The close-on-exec flag on the new file descriptor is unset.
88.Pp
89In
90.Fn dup2 ,
91the value of the new descriptor
92.Fa newd
93is specified.  If this descriptor is already in use and
94.Fa oldd
95\*(Ne
96.Fa newd ,
97the descriptor is first deallocated as if a
98.Xr close 2
99call had been used.
100If
101.Fa oldd
102is not a valid descriptor, then
103.Fa newd
104is not closed.
105If
106.Fa oldd
107==
108.Fa newd
109and
110.Fa oldd
111is a valid descriptor, then
112.Fn dup2
113is successful, and does nothing.
114.Sh RETURN VALUES
115The value -1 is returned if an error occurs in either call.
116The external variable
117.Va errno
118indicates the cause of the error.
119.Sh ERRORS
120.Fn Dup
121and
122.Fn dup2
123fail if:
124.Bl -tag -width Er
125.It Bq Er EBADF
126.Fa Oldd
127or
128.Fa newd
129is not a valid active descriptor
130.It Bq Er EMFILE
131Too many descriptors are active.
132.El
133.Sh SEE ALSO
134.Xr accept 2 ,
135.Xr close 2 ,
136.Xr fcntl 2 ,
137.Xr getdtablesize 2 ,
138.Xr open 2 ,
139.Xr pipe 2 ,
140.Xr socket 2 ,
141.Xr socketpair 2 ,
142.Xr dup3 3
143.Sh STANDARDS
144The
145.Fn dup
146and
147.Fn dup2
148function calls are expected to conform to
149.St -p1003.1-90 .
150.Sh HISTORY
151A
152.Fn dup
153and a
154.Fn dup2
155function call appeared in
156.At v7 .
157