readv, writev - read or write a vector


SYNOPSIS

       #include <sys/uio.h>

       int readv(int fd, const struct iovec * vector, int count);

       int writev(int  fd,  const  struct  iovec  *  vector,  int
       count);

       struct iovec {
         __ptr_t iov_base; /* Starting address.  */
         size_t iov_len; /* Length in bytes.  */
       };


DESCRIPTION

       readv  reads  data  from  file descriptor fd, and puts the
       result in the buffers described by vector. The  number  of
       buffers  is  specified by count. The buffers are filled in
       the order specified.  Operates just like read except  that
       data is put in vector instead of a contiguous buffer.

       writev  writes  data  to  file descriptor fd, and from the
       buffers described by vector.  The  number  of  buffers  is
       specified  by  count.  The  buffers  are used in the order
       specified.  Operates just like write except that  data  is
       taken from vector instead of a contiguous buffer.



RETURN VALUE

       On  success  readv  returns  the number of bytes read.  On
       success writev returns the number of  bytes  written.   On
       error, -1 is returned, and errno is set appropriately.



ERRORS

       EINVAL An  invalid  argument was given. For instance count
              might be greater than MAX_IOVEC, or zero.  fd could
              also  be  attached to an object  which  is  unsuit­
              able  for  reading  (for  readv)  or  writing  (for
              writev).

       EFAULT "Segmentation fault." Most likely vector or some of
              the iov_base pointers points to memory that is  not
              properly allocated.

       EBADF  The file descriptor fd is not valid.

       EINTR  The  call  was  interrupted  by a signal before any
              data was read/written.

       EAGAIN Non-blocking I/O has been selected using O_NONBLOCK
              locked.)

       EISDIR fd refers to a directory.

       EOPNOTSUP
              fd  refers to a socket or device that does not sup­
              port reading/writing.

       ENOMEM Insufficient kernel memory was available.

       Other errors may occur, depending on the object  connected
       to fd.


CONFORMING TO

       4.4BSD  (the  readv and writev functions first appeared in
       BSD 4.2), Unix98.  Linux libc5 uses size_t as the type  of
       the count parameter, which is logical but non-standard.


SEE ALSO

       read(2), write(2), fprintf(3), fscanf(3)