uio(9S)
NAME
uio - scatter/gather I/O request structure
SYNOPSIS
#include <sys/uio.h>
INTERFACE LEVEL
Architecture independent level 1 (DDI/DKI)
DESCRIPTION
A uio structure describes an I/O request that can be broken
up into different data storage areas (scatter/gather I/O). A
request is a list of iovec structures (base-length pairs)
indicating where in user space or kernel space the I/O data
is to be read or written.
The contents of uio structures passed to the driver through
the entry points should not be written by the driver. The
uiomove(9F) function takes care of all overhead related to
maintaining the state of the uio structure.
uio structures allocated by the driver should be initialized
to zero before use, by bzero(9F), kmem_zalloc(9F), or an
equivalent.
STRUCTURE MEMBERS
iovec_t *uio_iov; /* pointer to the start of the iovec */
/* list for the uio structure */
int uio_iovcnt; /* the number of iovecs in the list */
off_t uio_offset; /* 32-bit offset into file where data is */
/* transferred from or to. See NOTES. */
offset_t uio_loffset; /* 64-bit offset into file where data is */
/* transferred from or to. See NOTES. */
uio_seg_t uio_segflg; /* identifies the type of I/O transfer: */
/* UIO_SYSSPACE: kernel <-> kernel */
/* UIO_USERSPACE: kernel <-> user */
short uio_fmode; /* file mode flags (not driver setable) */
daddr_t uio_limit; /* 32-bit ulimit for file (maximum block */
/* offset). not driver setable. See NOTES. */
diskaddr_t uio_llimit; /* 64-bit ulimit for file (maximum block */
/* offset). not driver setable. See NOTES. */
int uio_resid; /* residual count */
The uio_iov member is a pointer to the beginning of the
iovec(9S) list for the uio. When the uio structure is
passed to the driver through an entry point, the driver
should not set uio_iov. When the uio structure is created
by the driver, uio_iov should be initialized by the driver
and not written to afterward.
SEE ALSO
aread(9E), awrite(9E), read(9E), write(9E), bzero(9F),
kmem_zalloc(9F), uiomove(9F), cb_ops(9S), iovec(9S)
Writing Device Drivers
NOTES
Only one structure, uio_offset or uio_loffset, should be
interpreted by the driver. Which field the driver interprets
is dependent upon the settings in the cb_ops(9S) structure.
Only one structure, uio_limit or uio_llimit, should be
interpreted by the driver. Which field the driver interprets
is dependent upon the settings in the cb_ops(9S) structure.
When performing I/O on a seekable device, the driver should
not modify either the uio_offset or the uio_loffset field of
the uio structure. I/O to such a device is constrained by
the maximum offset value. When performing I/O on a device on
which the concept of position has no relevance, the driver
may preserve the uio_offset or uio_loffset, perform the I/O
operation, then restore the uio_offset or uio_loffset to the
field's initial value. I/O performed to a device in this
manner is not constrained.
Man(1) output converted with
man2html