Line data Source code
1 : /* Copyright (C) 1991-2022 Free Software Foundation, Inc.
2 : This file is part of the GNU C Library.
3 :
4 : The GNU C Library is free software; you can redistribute it and/or
5 : modify it under the terms of the GNU Lesser General Public
6 : License as published by the Free Software Foundation; either
7 : version 2.1 of the License, or (at your option) any later version.
8 :
9 : The GNU C Library is distributed in the hope that it will be useful,
10 : but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 : Lesser General Public License for more details.
13 :
14 : You should have received a copy of the GNU Lesser General Public
15 : License along with the GNU C Library; if not, see
16 : <https://www.gnu.org/licenses/>. */
17 :
18 : #ifndef _SYS_UIO_H
19 : #define _SYS_UIO_H 1
20 :
21 : #include <features.h>
22 : #include <sys/types.h>
23 : #include <bits/types/struct_iovec.h>
24 : #include <bits/uio_lim.h>
25 : #ifdef __IOV_MAX
26 : # define UIO_MAXIOV __IOV_MAX
27 : #else
28 : # undef UIO_MAXIOV
29 : #endif
30 :
31 : __BEGIN_DECLS
32 :
33 : /* Read data from file descriptor FD, and put the result in the
34 : buffers described by IOVEC, which is a vector of COUNT 'struct iovec's.
35 : The buffers are filled in the order specified.
36 : Operates just like 'read' (see <unistd.h>) except that data are
37 : put in IOVEC instead of a contiguous buffer.
38 :
39 : This function is a cancellation point and therefore not marked with
40 : __THROW. */
41 11348711 : extern ssize_t readv (int __fd, const struct iovec *__iovec, int __count)
42 : __wur __attr_access ((__read_only__, 2, 3));
43 :
44 : /* Write data pointed by the buffers described by IOVEC, which
45 : is a vector of COUNT 'struct iovec's, to file descriptor FD.
46 : The data is written in the order specified.
47 : Operates just like 'write' (see <unistd.h>) except that the data
48 : are taken from IOVEC instead of a contiguous buffer.
49 :
50 : This function is a cancellation point and therefore not marked with
51 : __THROW. */
52 11617224 : extern ssize_t writev (int __fd, const struct iovec *__iovec, int __count)
53 : __wur __attr_access ((__read_only__, 2, 3));
54 :
55 :
56 : #ifdef __USE_MISC
57 : # ifndef __USE_FILE_OFFSET64
58 : /* Read data from file descriptor FD at the given position OFFSET
59 : without change the file pointer, and put the result in the buffers
60 : described by IOVEC, which is a vector of COUNT 'struct iovec's.
61 : The buffers are filled in the order specified. Operates just like
62 : 'pread' (see <unistd.h>) except that data are put in IOVEC instead
63 : of a contiguous buffer.
64 :
65 : This function is a cancellation point and therefore not marked with
66 : __THROW. */
67 : extern ssize_t preadv (int __fd, const struct iovec *__iovec, int __count,
68 : __off_t __offset)
69 : __wur __attr_access ((__read_only__, 2, 3));
70 :
71 : /* Write data pointed by the buffers described by IOVEC, which is a
72 : vector of COUNT 'struct iovec's, to file descriptor FD at the given
73 : position OFFSET without change the file pointer. The data is
74 : written in the order specified. Operates just like 'pwrite' (see
75 : <unistd.h>) except that the data are taken from IOVEC instead of a
76 : contiguous buffer.
77 :
78 : This function is a cancellation point and therefore not marked with
79 : __THROW. */
80 : extern ssize_t pwritev (int __fd, const struct iovec *__iovec, int __count,
81 : __off_t __offset)
82 : __wur __attr_access ((__read_only__, 2, 3));
83 :
84 : # else
85 : # ifdef __REDIRECT
86 : extern ssize_t __REDIRECT (preadv, (int __fd, const struct iovec *__iovec,
87 : int __count, __off64_t __offset),
88 : preadv64)
89 : __wur __attr_access ((__read_only__, 2, 3));
90 : extern ssize_t __REDIRECT (pwritev, (int __fd, const struct iovec *__iovec,
91 : int __count, __off64_t __offset),
92 : pwritev64)
93 : __wur __attr_access ((__read_only__, 2, 3));
94 : # else
95 : # define preadv preadv64
96 : # define pwritev pwritev64
97 : # endif
98 : # endif
99 :
100 : # ifdef __USE_LARGEFILE64
101 : /* Read data from file descriptor FD at the given position OFFSET
102 : without change the file pointer, and put the result in the buffers
103 : described by IOVEC, which is a vector of COUNT 'struct iovec's.
104 : The buffers are filled in the order specified. Operates just like
105 : 'pread' (see <unistd.h>) except that data are put in IOVEC instead
106 : of a contiguous buffer.
107 :
108 : This function is a cancellation point and therefore not marked with
109 : __THROW. */
110 : extern ssize_t preadv64 (int __fd, const struct iovec *__iovec, int __count,
111 : __off64_t __offset)
112 : __wur __attr_access ((__read_only__, 2, 3));
113 :
114 : /* Write data pointed by the buffers described by IOVEC, which is a
115 : vector of COUNT 'struct iovec's, to file descriptor FD at the given
116 : position OFFSET without change the file pointer. The data is
117 : written in the order specified. Operates just like 'pwrite' (see
118 : <unistd.h>) except that the data are taken from IOVEC instead of a
119 : contiguous buffer.
120 :
121 : This function is a cancellation point and therefore not marked with
122 : __THROW. */
123 : extern ssize_t pwritev64 (int __fd, const struct iovec *__iovec, int __count,
124 : __off64_t __offset)
125 : __wur __attr_access ((__read_only__, 2, 3));
126 : # endif
127 : #endif /* Use misc. */
128 :
129 :
130 : #ifdef __USE_GNU
131 : # ifndef __USE_FILE_OFFSET64
132 : /* Same as preadv but with an additional flag argumenti defined at uio.h. */
133 : extern ssize_t preadv2 (int __fp, const struct iovec *__iovec, int __count,
134 : __off_t __offset, int ___flags)
135 : __wur __attr_access ((__read_only__, 2, 3));
136 :
137 : /* Same as preadv but with an additional flag argument defined at uio.h. */
138 : extern ssize_t pwritev2 (int __fd, const struct iovec *__iodev, int __count,
139 : __off_t __offset, int __flags) __wur;
140 :
141 : # else
142 : # ifdef __REDIRECT
143 : extern ssize_t __REDIRECT (pwritev2, (int __fd, const struct iovec *__iovec,
144 : int __count, __off64_t __offset,
145 : int __flags),
146 : pwritev64v2)
147 : __wur __attr_access ((__read_only__, 2, 3));
148 : extern ssize_t __REDIRECT (preadv2, (int __fd, const struct iovec *__iovec,
149 : int __count, __off64_t __offset,
150 : int __flags),
151 : preadv64v2)
152 : __wur __attr_access ((__read_only__, 2, 3));
153 : # else
154 : # define preadv2 preadv64v2
155 : # define pwritev2 pwritev64v2
156 : # endif
157 : # endif
158 :
159 : # ifdef __USE_LARGEFILE64
160 : /* Same as preadv but with an additional flag argumenti defined at uio.h. */
161 : extern ssize_t preadv64v2 (int __fp, const struct iovec *__iovec,
162 : int __count, __off64_t __offset,
163 : int ___flags)
164 : __wur __attr_access ((__read_only__, 2, 3));
165 :
166 : /* Same as preadv but with an additional flag argument defined at uio.h. */
167 : extern ssize_t pwritev64v2 (int __fd, const struct iovec *__iodev,
168 : int __count, __off64_t __offset,
169 : int __flags)
170 : __wur __attr_access ((__read_only__, 2, 3));
171 : # endif
172 : #endif /* Use GNU. */
173 :
174 : __END_DECLS
175 :
176 : /* Some operating systems provide system-specific extensions to this
177 : header. */
178 : #ifdef __USE_GNU
179 : # include <bits/uio-ext.h>
180 : #endif
181 :
182 : #endif /* sys/uio.h */
|