The definition of the ioctl function is:
int ioctl(int d, int request, ...);
The Linux manual page of ioctl states:
The ioctl function manipulates the underlying device parameters of special files. In particular, many operating characteristics of character special files (e.g. terminals) may be controlled with ioctl requests. The argument d must be an open file descriptor.
The second argument is a device-dependent request code. The third argument is an untyped pointer to memory. It's traditionally char *argp (from the days before void * was valid C), and will be so named for this discussion.
An ioctl request has encoded in it whether the argument is an
in parameter or out parameter, and the size of the argument argp
in bytes. Macros and defines used in specifying an
ioctl request are located in the file <sys/ioctl.h>.
Usually, on success zero is returned. A few ioctls use the return value as an output parameter and return a nonnegative value on success. On error, -1 is returned, and errno is set appropriately.
In other words, ioctl(2) is a multi-purpose system call. Based on the request parameter, lots of information can be gathered from or sent to kernel space. Most hardware devices can be manipulated and information can be fetched from them by this system-call. Data to be received or set, is put in some predefined data-structure depending on what request is issued.
Andreas 2004-07-29