|
» |
|
|
|
NAMEioctl — generic device control commands SYNOPSIS#include <sys/ioctl.h>
ioctl(fildes, request, arg)
int fildes, request; DESCRIPTIONThe
ioctl(2)
system call provides for control over open devices.
This include file describes
requests
and
arguments
used in
ioctl(2)
which are of a generic nature.
For details about how individual requests will affect any particular device,
see the corresponding device manual entry in Section 7 of the
HP-UX Reference.
If a device does not support an ioctl request it returns
EINVAL.
- FIONREAD
Returns in the long integer whose address is
arg
the number of characters immediately readable from the device file. - FIOSSAIOSTAT
For those character device files which support this command,
if the integer whose address is
arg
is nonzero, system asynchronous
I/O
is enabled; that is, enable
SIGIO
to be sent to the process currently designated with
FIOSSAIOOWN
(see below) whenever device-file-dependent events occur.
If no process has been designated with
FIOSSAIOOWN,
then enable
SIGIO
to be sent to the first process to open the device file. If the designated process has exited, the
SIGIO
signal is not sent to any process. If the integer whose address is
arg
is 0, system asynchronous
I/O
is disabled. - FIOGSAIOSTAT
For those character device files which support this command,
the integer whose address is
arg
is set to 1, if system asynchronous
I/O
is enabled.
Otherwise, the integer whose address is
arg
is set to 0. - FIOSSAIOOWN
For those character device files which support this command,
set process
ID
to receive the
SIGIO
signals with system asynchronous
I/O
to the value of the integer whose address is
arg.
Users with appropriate privileges can designate
that any process receive the
SIGIO
signals.
If the request is not made by the super-user, only the calling process
is allowed to designate that itself or another process
whose real or saved effective user
ID
matches its real or effective user
ID,
or a process which is a descendant of the calling process, receive the
SIGIO
signals.
If no process can be found corresponding to that specified by the
integer whose address is arg, the call will fail, with
errno
set to
ESRCH.
If the request is not made by the super-user
and the calling process attempts to designate
a process other than itself or (1)
another process whose real or saved effective user
ID
matches its real or effective user
ID,
or (2) a process which is not a descendant of the calling process,
the call fails, with
errno
set to
EPERM. If the designated process subsequently exits, the
SIGIO
signal will not be sent to any process. The default when opening a device file is that the process
performing the open is set to receive the
SIGIO
signals. - FIOGSAIOOWN
For those character device files which support this command,
the integer whose address is
arg
is set to the process
ID
designated to receive
SIGIO
signals. - FIOSNBIO
For those character device files which support this command,
if the integer whose address is
arg
is nonzero, nonblocking
I/O
is enabled; that is, subsequent reads and writes to the device file
are handled in a nonblocking manner (see below).
If the integer whose address is
arg
is 0, nonblocking
I/O
is disabled. For reads, nonblocking
I/O
prevents all read requests to that device from blocking,
whether the requests succeed or fail.
Such read requests complete in one of three ways:
If there is enough data available to satisfy the entire request,
the read completes successfully, having read all of the data,
and returns the number of bytes read; If there is not enough data available to satisfy the entire request,
the read completes successfully, having read as much data as possible,
and returns the number of bytes it was able to read; If there is no data available, the read fails and
errno
is set to
EWOULDBLOCK.
For writes, nonblocking
I/O
prevents all write requests to that device file from blocking,
whether the requests succeed or fail.
Such a write request completes in one of three ways:
If there is enough space available in the system to buffer all the data,
the write completes successfully, having written out all of the data,
and returns the number of bytes written; If there is not enough space in the buffer to write out the entire request,
the write completes successfully, having written as much data as possible,
and returns the number of bytes it was able to write; If there is no space in the buffer, the write fails and
errno
is set to
EWOULDBLOCK.
To prohibit nonblocking
I/O
from interfering with the
O_NDELAY
flag (see
open(2)
and
fcntl(2)),
the functionality of
O_NDELAY
always supersedes the functionality of nonblocking
I/O.
This means that if
O_NDELAY
is set, the driver performs read requests in accordance
with the definition of
O_NDELAY.
When
O_NDELAY
is not set, the definition of nonblocking
I/O
applies. The default on open of a device file is that nonblocking
I/O
is disabled. - FIOGNBIO
For those character device files which support this command,
the integer whose address is
arg
is set to 1, if nonblocking I/O is enabled.
Otherwise, the integer whose address is
arg
is set to 0.
WARNINGSFIOSSAIOSTAT
is similar to 4.2 BSD
FIOASYNC,
with the addition of provisions for security. FIOGSAIOSTAT
is of HP origin, complements
FIOSSAIOSTAT,
and allows saving and restoring system asynchronous
I/O TTY state for BSD-style job control. FIOSSAIOOWN
is similar to 4.2 BSD
FIOSETOWN,
with the addition of provisions for security. FIOGSAIOOWN
is similar to 4.2 BSD
FIOGETOWN.
Note also the difference that the 4.2 BSD
version of this functionality used process groups,
while the HP-UX version only uses processes. FIOSNBIO
is the same as 4.2 BSD
FIONBIO,
except that it does not interfere with the AT&T
O_NDELAY
open
and
fcntl
flag. FIOGNBIO
is of HP origin, complements
FIOSNBIO,
and allows saving and restoring nonblocking
I/O TTY state for BSD-style job control.
|