shithub: riscv

ref: e38d42b4a7f278a7f7835e07983115e4ee1b0db4
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.