int ioctl(int fildes, int request, ... /* arg */);
ioctl performs a variety of control functions
on devices and STREAMS.
For non-STREAMS files, the functions
performed by this call are device-specific control functions.
request and an optional third argument with varying type
are passed to the file designated by fildes
and are interpreted by the device driver.
This control is not frequently used on non-STREAMS devices,
where the basic input/output functions are usually performed through the
For STREAMS files, specific functions are performed by
the ioctl call as described in
fildes is an open file descriptor that refers to a device.
request selects the control function to be performed
and depends on the device being addressed.
arg represents a third argument that has additional information
that is needed by this specific device to perform the requested function.
The data type of arg depends on the particular control request,
but it is either an int or a pointer to a device-specific data structure.
In addition to device-specific and STREAMS functions,
generic functions are provided by more than one device driver,
for example, the general terminal interface [see
On success, ioctl returns a non-negative integer that depends on
the device control function.
On failure, ioctl returns -1 and sets errno to identify the error.
In the following conditions, ioctl fails and sets errno to:
The type of access requested on the file designated by fildes is denied.
fildes is not a valid open file descriptor.
fildes is not associated with a character-special file
that accepts control functions.
A signal was caught during the ioctl system call.
ioctl also fails if the device driver detects an error.
In this case, the error is passed through ioctl
without change to the caller.
A particular driver might not have all the following error cases.
In the following conditions, requests to device drivers may fail
and set errno to:
request requires a data transfer to or from
a buffer pointed to by arg, but some part of the buffer is outside
the process's allocated space.
request or arg is not valid for this device.
Some physical I/O error has occurred.
The request and arg are valid for this device driver,
but the service requested cannot be performed on this particular subdevice.
fildes is on a remote machine and the link to that machine is no
STREAMS errors are described in
Considerations for threads programming
Open file descriptors are a process resource and available to any sibling thread;
if used concurrently, actions by one thread can interfere with
those of a sibling.
While one thread is blocked, siblings might still be executing.
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004