Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
The ioctl interface is the catchall of I/O operations (Stevens, 1992). Any operation that cannot be expressed using d_read or d_write (that is, any operation that’s not a data transfer) is supported by d_ioctl.[3] For example, the CD-ROM driver’s d_ioctl function performs 29 distinct operations, such as ejecting the CD, starting audio playback, stopping audio playback, muting the audio, and so on.
The function prototype for d_ioctl is defined in the <sys/conf.h> header as follows:
typedef int d_ioctl_t(struct cdev *dev, u_longcmd, caddr_t
data, int fflag, struct thread *td);
Here,
cmd is an ioctl command passed from user space. ioctl commands are driver-defined numeric constants that identify the different I/O operations that a d_ioctl function can perform. Generally, you’d use the cmd argument in a switch statement to set up a code block for each I/O operation. Any arguments required for an I/O operation are passed through
data.