man-pages/man2/poll.2

288 lines
7.3 KiB
Groff
Raw Normal View History

2004-11-03 13:51:07 +00:00
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) 1997 Andries Brouwer (aeb@cwi.nl)
2006-03-16 00:06:34 +00:00
.\" and Copyright (C) 2006, Michael Kerrisk <mtk-manpages@gmx.net>
2004-11-03 13:51:07 +00:00
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date. The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein. The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Additions from Richard Gooch <rgooch@atnf.CSIRO.AU> and aeb, 971207
2006-03-16 00:06:34 +00:00
.\" 2006-03-13, mtk, Added ppoll() + various other rewordings
2004-11-03 13:51:07 +00:00
.\"
2006-03-25 21:07:31 +00:00
.\" FIXME . 2.6.17 is likely to get POLLRDHUP (and its analogue
.\" EPOLLRDHUP).
.\"
2006-04-03 23:35:16 +00:00
.\" FIXME . 2.6.17-rc1 has a defintion for POLLREMOVE, but this
.\" flag is not used in the code. Check later to see if it
.\" does get a use.
.\"
2006-03-16 00:06:34 +00:00
.TH POLL 2 2006-03-13 "Linux 2.6.16" "Linux Programmer's Manual"
2004-11-03 13:51:07 +00:00
.SH NAME
2006-03-16 00:06:34 +00:00
poll, ppoll \- wait for some event on a file descriptor
2004-11-03 13:51:07 +00:00
.SH SYNOPSIS
2006-03-16 00:06:34 +00:00
.nf
2004-11-03 13:51:07 +00:00
.B #include <sys/poll.h>
.sp
2006-03-16 00:06:34 +00:00
.BI "int poll(struct pollfd *" fds ", nfds_t " nfds ", int " timeout );
.sp
2006-03-19 23:37:17 +00:00
.B #define _GNU_SOURCE
.B #include <sys/poll.h>
.sp
2006-03-16 00:06:34 +00:00
.BI "int ppoll(struct pollfd *" fds ", nfds_t " nfds ", "
.BI " const struct timespec *" timeout ", const sigset_t *" sigmask );
.fi
2004-11-03 13:51:07 +00:00
.SH DESCRIPTION
.BR poll ()
2006-03-16 00:06:34 +00:00
performs a similar task to
.BR select (2):
it waits for one of a set of file descriptors to become ready
to perform I/O.
The set of file descriptors to be monitored is specified in the
.I fds
argument, which is an array of
2004-11-03 13:51:07 +00:00
.I nfds
2006-03-16 00:06:34 +00:00
structures of the following form:
2004-11-03 13:51:07 +00:00
.nf
struct pollfd {
2006-03-16 00:06:34 +00:00
int fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
2004-11-03 13:51:07 +00:00
.fi
The field
.I fd
contains a file descriptor for an open file.
The field
.I events
is an input parameter, a bitmask specifying the events the application
is interested in.
The field
.I revents
is an output parameter, filled by the kernel with the events that
2006-03-16 00:06:34 +00:00
actually occurred.
The bits returned in
.I revents
can include any of those specified in
.IR events ,
or one of the values
.BR POLLERR ,
.BR POLLHUP ,
2004-11-03 13:51:07 +00:00
or
.BR POLLNVAL .
(These three bits are meaningless in the
.I events
field, and will be set in the
.I revents
field whenever the corresponding condition is true.)
If none of the events requested (and no error) has occurred for any
2006-03-16 00:06:34 +00:00
of the file descriptors, then
.BR poll ()
blocks until one of the events occurs.
The bits that may be set/returned in
.I events
and
.I revents
are defined in <sys/poll.h>:
2004-11-03 13:51:07 +00:00
.br
.nf
2004-11-03 13:51:07 +00:00
#define POLLIN 0x0001 /* There is data to read */
#define POLLPRI 0x0002 /* There is urgent data to read */
#define POLLOUT 0x0004 /* Writing now will not block */
2006-03-16 00:06:34 +00:00
#define POLLERR 0x0008 /* Error condition (output only) */
#define POLLHUP 0x0010 /* Hung up (output only) */
#define POLLNVAL 0x0020 /* Invalid request: fd not open
(output only) */
2004-11-03 13:51:07 +00:00
.fi
When compiling XPG4.2 source one also has:
2004-11-03 13:51:07 +00:00
.br
.nf
#ifdef _XOPEN_SOURCE
2004-11-03 13:51:07 +00:00
#define POLLRDNORM 0x0040 /* Normal data may be read */
#define POLLRDBAND 0x0080 /* Priority data may be read */
#define POLLWRNORM 0x0100 /* Writing now will not block */
#define POLLWRBAND 0x0200 /* Priority data may be written */
#endif
2004-11-03 13:51:07 +00:00
.fi
Finally, Linux knows about:
2004-11-03 13:51:07 +00:00
.br
.nf
#ifdef _GNU_SOURCE
2004-11-03 13:51:07 +00:00
#define POLLMSG 0x0400
#endif
2004-11-03 13:51:07 +00:00
.fi
2006-03-16 00:06:34 +00:00
.PP
The
.I timeout
argument specifies an upper limit on the time for which
.BR poll ()
will block, in milliseconds.
Specifying a negative value in
.I timeout
means an infinite timeout.
.SS ppoll()
The relationship between
.BR poll ()
and
.BR ppoll ()
is analogous to the relationship between
.BR select ()
and
.BR pselect ():
like
.BR pselect (),
.BR ppoll ()
allows an application to safely wait until either a file descriptor
becomes ready or until a signal is caught.
.PP
Other than the difference in the
.I timeout
argument, the following
.BR ppoll ()
call:
.nf
ready = ppoll(&fds, nfds, timeout, &sigmask);
.fi
is equivalent to
.I atomically
executing the following calls:
.nf
sigset_t origmask;
sigprocmask(SIG_SETMASK, &sigmask, &origmask);
ready = ppoll(&fds, nfds, timeout);
sigprocmask(SIG_SETMASK, &origmask, NULL);
.fi
.PP
See the description of
.BR pselect (2)
for an explanation of why
.BR ppoll ()
is necessary.
The
.I timeout
argument specifies an upper limit on the amount of time that
.BR ppoll ()
will block.
This argument is a pointer to a structure of the following form:
.in +0.25i
.nf
struct timespec {
long tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
.fi
.in -0.25i
If
.I timeout
is specified as NULL, then
.BR ppoll ()
can block indefinitely.
2004-11-03 13:51:07 +00:00
.SH "RETURN VALUE"
On success, a positive number is returned; this is
the number of structures which have non-zero
2004-11-03 13:51:07 +00:00
.I revents
fields (in other words, those descriptors with events or errors reported).
A value of 0 indicates that the call timed out and no file
descriptors were ready. On error, \-1 is returned, and
2004-11-03 13:51:07 +00:00
.I errno
is set appropriately.
.SH ERRORS
.TP
.B EBADF
An invalid file descriptor was given in one of the sets.
.TP
.B EFAULT
The array given as argument was not contained in the calling program's
address space.
.TP
.B EINTR
A signal occurred before any requested event.
.TP
.B EINVAL
The
.I nfds
value exceeds the RLIMIT_NOFILE value.
.TP
.B ENOMEM
There was no space to allocate file descriptor tables.
2006-03-16 00:06:34 +00:00
.SH "LINUX NOTES"
The Linux
.BR ppoll ()
system call modifies its
.I timeout
argument.
However, the glibc wrapper function hides this behaviour
by using a local variable for the timeout argument that
is passed to the system call.
Thus, the glibc
.BR ppoll ()
function does not modify its timeout argument.
2004-11-03 13:51:07 +00:00
.SH BUGS
2006-03-16 00:06:34 +00:00
See the discussion of spurious readiness notifications under the
BUGS section of
2004-11-03 13:51:07 +00:00
.BR select (2).
.SH "CONFORMING TO"
2006-03-16 00:06:34 +00:00
.BR poll ()
conforms to POSIX.1-2001.
.BR ppoll ()
is Linux specific.
.\" NetBSD 3.0 has a pollts() which is like Linux ppoll().
.SH VERSIONS
2005-10-19 14:48:35 +00:00
The
.BR poll ()
system call was introduced in Linux 2.1.23.
The
2005-10-19 14:54:31 +00:00
.BR poll ()
2005-10-19 14:48:35 +00:00
library call was introduced in libc 5.4.28
2006-03-16 00:06:34 +00:00
(and provides emulation using select() if your kernel does not
2005-10-20 15:11:10 +00:00
have a
.BR poll ()
system call).
2006-03-16 00:06:34 +00:00
The
.BR ppoll ()
system call was added to Linux in kernel 2.6.16.
The
.BR ppoll ()
library call was added in glibc 2.4.
.SH NOTES
Some implementations define the non-standard constant
.B INFTIM
with the value \-1 for use as a
.IR timeout .
This constant is not provided in glibc.
2004-11-03 13:51:07 +00:00
.SH "SEE ALSO"
.BR select (2),
.BR select_tut (2)