The
poll()
system call
examines a set of file descriptors to see if some of them are ready for
I/O.
The
fds
argument is a pointer to an array of pollfd structures as defined in
<poll.h>
(shown below).
The
nfds
argument determines the size of the
fds
array.
struct pollfd {
int fd; /* file descriptor */
short events; /* events to look for */
short revents; /* events returned */
};
The fields of
struct, pollfd
are as follows:
fd
|
File descriptor to poll.
If fd is equal to -1 then
revents
is cleared (set to zero), and that pollfd is not checked.
|
events
|
Events to poll for.
(See below.)
|
revents
|
Events which may occur.
(See below.)
|
The event bitmasks in
events
and
revents
have the following bits:
POLLIN
|
Data other than high priority data may be read without blocking.
|
POLLRDNORM
|
Normal data may be read without blocking.
|
POLLRDBAND
|
Data with a non-zero priority may be read without blocking.
|
POLLPRI
|
High priority data may be read without blocking.
|
POLLOUT
POLLWRNORM
|
|
Normal data may be written without blocking.
|
POLLWRBAND
|
Data with a non-zero priority may be written without blocking.
|
POLLERR
|
An exceptional condition has occurred on the device or socket.
This
flag is always checked, even if not present in the
events
bitmask.
|
POLLHUP
|
The device or socket has been disconnected.
This flag is always
checked, even if not present in the
events
bitmask.
Note that
POLLHUP
and
POLLOUT
should never be present in the
revents
bitmask at the same time.
|
POLLNVAL
|
The file descriptor is not open,
or in capability mode the file descriptor has insufficient rights.
This flag is always checked, even
if not present in the
events
bitmask.
|
If
timeout
is neither zero nor INFTIM (-1), it specifies a maximum interval to
wait for any file descriptor to become ready, in milliseconds.
If
timeout
is INFTIM (-1), the poll blocks indefinitely.
If
timeout
is zero, then
poll()
will return without blocking.
The
ppoll()
system call, unlike
poll(),
is used to safely wait until either a set of file descriptors becomes
ready or until a signal is caught.
The
fds
and
nfds
arguments are identical to the analogous arguments of
poll().
The
timeout
argument in
ppoll()
points to a
const struct timespec
which is defined in
<sys/timespec.h>
(shown below) rather than the
int timeout
used by
poll().
A null pointer may be passed to indicate that
ppoll()
should wait indefinitely.
Finally,
newsigmask
specifies a signal mask which is set while waiting for input.
When
ppoll()
returns, the original signal mask is restored.
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* and nanoseconds */
};