Go to main content

man pages section 9: DDI and DKI Driver Entry Points

Exit Print View

Updated: July 2017



write - write data to a device


#include <sys/types.h>
#include <sys/errno.h>
#include <sys/open.h>
#include <sys/cred.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

int prefixwrite(dev_t dev, struct uio *uio_p, cred_t *cred_p);

Interface Level

Architecture independent level 1 (DDI/DKI). This entry point is optional.



Device number.


Pointer to the uio(9S) structure that describes where the data is to be stored in user space.


Pointer to the user credential structure for the I/O transaction.


Used for character or raw data I/O, the driver write() routine is called indirectly through cb_ops(9S) by the write(2) system call. The write() routine supervises the data transfer from user space to a device described by the uio(9S) structure.

The write() routine should check the validity of the minor number component of dev and the user credentials pointed to by cred_p, if pertinent.

Return Values

The write() routine should return 0 for success, or the appropriate error number.


The following is an example of a write() routine using physio(9F) to perform writes to a seekable device:

static int
xxwrite(dev_t dev, struct uio *uiop, cred_t *credp)
      int	instance;
      xx_t	xx;

      instance = getminor(dev);
      xx = ddi_get_soft_state(xxstate, instance);
      if (xx == NULL)
             return (ENXIO);
      return (physio(xxstrategy, NULL, dev, B_WRITE,
             xxmin, uiop));

See Also

read(2), write(2), read(9E), physio(9F), cb_ops(9S), uio(9S)

Writing Device Drivers for Oracle Solaris 11.3