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