If you set the O_ASYNC
status flag on a file descriptor (see File Status Flags), a SIGIO
signal is sent whenever input or output becomes possible on that file descriptor. The process or process group to receive the signal can be selected by using the F_SETOWN
command to the fcntl
function. If the file descriptor is a socket, this also selects the recipient of SIGURG
signals that are delivered when out-of-band data arrives on that socket; see Out-of-Band Data. (SIGURG
is sent in any situation where select
would report the socket as having an ``exceptional condition''. See Waiting for I/O.)
If the file descriptor corresponds to a terminal device, then SIGIO
signals are sent to the foreground process group of the terminal. See Job Control.
The symbols in this section are defined in the header file `fcntl.h'.
fcntl
, to specify that it should get information about the process or process group to which SIGIO
signals are sent. (For a terminal, this is actually the foreground process group ID, which you can get using tcgetpgrp
; see Terminal Access Functions.) The return value is interpreted as a process ID; if negative, its absolute value is the process group ID.
The following errno
error condition is defined for this command:
EBADF
fcntl
, to specify that it should set the process or process group to which SIGIO
signals are sent. This command requires a third argument of type pid_t
to be passed to fcntl
, so that the form of the call is:
fcntl (filedes, F_SETOWN, pid)
The pid argument should be a process ID. You can also pass a negative number whose absolute value is a process group ID.
The return value from fcntl
with this command is -1
in case of error and some other value if successful. The following errno
error conditions are defined for this command:
EBADF
ESRCH