(root)/
glibc-2.38/
misc/
sys/
uio.h
       1  /* Copyright (C) 1991-2023 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 */