shithub: riscv

ref: 93ab48008e6574a7b790c85e1f81c97ef088d7c7
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.