82 lines
1.4 KiB
Text
82 lines
1.4 KiB
Text
.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.
|