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 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 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 */ 183