NAME¶
readv, writev - read or write data into multiple buffers
SYNOPSIS¶
#include <sys/uio.h>
int readv(int filedes, const struct iovec *vector,
size_t count);
int writev(int filedes, const struct iovec *vector,
size_t count);
DESCRIPTION¶
The
readv() function reads
count blocks from the file associated
with the file descriptor
filedes into the multiple buffers described by
vector.
The
writev() function writes at most
count blocks described by
vector to the file associated with the file descriptor
filedes.
The pointer
vector points to a
struct iovec defined in
<sys/uio.h> as
struct iovec {
void *iov_base; /* Starting address */
size_t iov_len; /* Number of bytes */
};
Buffers are processed in the order
vector[0],
vector[1], ...
vector[count].
The
readv() function works just like
read(2) except that multiple
buffers are filled.
The
writev() function works just like
write(2) except that
multiple buffers are written out.
RETURN VALUES¶
The
readv() function returns the number of bytes or -1 on error; the
writev() function returns the number of bytes written.
ERRORS¶
The
readv() and
writev() functions can fail and set
errno
to the following values:
- EBADF
- fd is not a valid file descriptor.
- EINVAL
- fd is unsuitable for reading (for readv()) or writing (for
writev()).
- EFAULT
- buf is outside the processes' address space.
- EAGAIN
- Non-blocking I/O had been selected in the open() call, and reading
or writing could not be done immediately.
- EINTR
- Reading or writing was interrupted before any data was transferred.
unknown
BUGS¶
It is not advisable to mix calls to functions like
readv() or
writev(), which operate on file descriptors, with the functions from
the stdio library; the results will be undefined and probably not what you
want.
SEE ALSO¶
read(2),
write(2)