ioctl(2)


ioctl -- control device

Synopsis

   #include <unistd.h>
   #include <stropts.h>
   

int ioctl(int fildes, int request, ... /* arg */);

Description

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 read(2) and write(2) system calls.

For STREAMS files, specific functions are performed by the ioctl call as described in streamio(7).

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 termio(7)].

Return values

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.

Errors

In the following conditions, ioctl fails and sets errno to:

EACCES
The type of access requested on the file designated by fildes is denied.

EBADF
fildes is not a valid open file descriptor.

ENOTTY
fildes is not associated with a character-special file that accepts control functions.

EINTR
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:


EFAULT
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.

EINVAL
request or arg is not valid for this device.

EIO
Some physical I/O error has occurred.

ENXIO
The request and arg are valid for this device driver, but the service requested cannot be performed on this particular subdevice.

ENOLINK
fildes is on a remote machine and the link to that machine is no longer active.

STREAMS errors are described in streamio(7).

References

streamio(7), termio(7)

Notices

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