Upgrade less(1). 1/2
[dragonfly.git] / lib / libc / sys / dup.2
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
48 duplicates an existing object descriptor and returns its value to
49 the calling process
50 .Fa ( newd
51 =
52 .Fn dup oldd ) .
53 The argument
54 .Fa oldd
55 is a small non-negative integer index in
56 the per-process descriptor table.  The value must be less
57 than the size of the table, which is returned by
58 .Xr getdtablesize 2 .
59 The new descriptor returned by the call
60 is the lowest numbered descriptor
61 currently not in use by the process.
62 .Pp
63 The object referenced by the descriptor does not distinguish
64 between
65 .Fa oldd
66 and
67 .Fa newd
68 in any way.
69 Thus if
70 .Fa newd
71 and
72 .Fa oldd
73 are duplicate references to an open
74 file,
75 .Xr read 2 ,
76 .Xr write 2
77 and
78 .Xr lseek 2
79 calls all move a single pointer into the file,
80 and append mode, non-blocking I/O and asynchronous I/O options
81 are shared between the references.
82 If a separate pointer into the file is desired, a different
83 object reference to the file must be obtained by issuing an
84 additional
85 .Xr open 2
86 call.
87 The close-on-exec flag on the new file descriptor is unset.
88 .Pp
89 In
90 .Fn dup2 ,
91 the value of the new descriptor
92 .Fa newd
93 is specified.  If this descriptor is already in use and
94 .Fa oldd
95 \*(Ne
96 .Fa newd ,
97 the descriptor is first deallocated as if a
98 .Xr close 2
99 call had been used.
100 If
101 .Fa oldd
102 is not a valid descriptor, then
103 .Fa newd
104 is not closed.
105 If
106 .Fa oldd
107 ==
108 .Fa newd
109 and
110 .Fa oldd
111 is a valid descriptor, then
112 .Fn dup2
113 is successful, and does nothing.
114 .Sh RETURN VALUES
115 The value -1 is returned if an error occurs in either call.
116 The external variable
117 .Va errno
118 indicates the cause of the error.
119 .Sh ERRORS
120 .Fn Dup
121 and
122 .Fn dup2
123 fail if:
124 .Bl -tag -width Er
125 .It Bq Er EBADF
126 .Fa Oldd
127 or
128 .Fa newd
129 is not a valid active descriptor
130 .It Bq Er EMFILE
131 Too 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
144 The
145 .Fn dup
146 and
147 .Fn dup2
148 function calls are expected to conform to
149 .St -p1003.1-90 .
150 .Sh HISTORY
151 A
152 .Fn dup
153 and a
154 .Fn dup2
155 function call appeared in
156 .At v7 .