shithub: riscv

ref: a5db044fd3ccb8f021d4deb07b3dc732ed41d699
dir: /sys/man/2/readv/

View raw version
.TH READV 2
.SH NAME
readv, writev, preadv, pwritev \- scatter/gather read and write
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.nf
.ft L
typedef
struct IOchunk
{
	void		*addr;
	ulong	len;
} IOchunk;
.fi
.PP
.B
long readv(int fd, IOchunk *io, int nio)
.PP
.B
long preadv(int fd, IOchunk *io, int nio, vlong off)
.PP
.B
long writev(int fd, IOchunk *io, int nio)
.PP
.B
long pwritev(int fd, IOchunk *io, int nio, vlong off)
.SH DESCRIPTION
These functions supplement the standard read and write operations of
.IR read (2)
with facilities for scatter/gather I/O.
The set of I/O buffers is collected into an array of
.B IOchunk
structures passed as an argument.
.PP
.I Readv
reads data from
.I fd
and returns the total number of bytes received.
The received data is stored in the successive
.I nio
elements of the
.B IOchunk
array, storing
.IB io [0].len
bytes at
.IB io [0].addr\f1,
the next
.IB io [1].len
at
.IB io [1].addr\f1,
and so on.
.I Preadv
does the same, but implicitly seeks to I/O offset
.I off
by analogy with
.IR readv .
.PP
.I Writev
and
.I pwritev
are the analogous write routines.
.SH SOURCE
.B /sys/src/libc/9sys/readv.c
.br
.B /sys/src/libc/9sys/writev.c
.SH SEE ALSO
.IR intro (2),
.IR read (2)
.SH DIAGNOSTICS
These functions set
.IR errstr .
.SH BUGS
The implementations use
.IR malloc (2)
to build a single buffer for a standard call to
.B read
or
.BR write .
They are placeholders for possible future system calls.