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