]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/select.2
get_robust_list.2: tstamp fix
[thirdparty/man-pages.git] / man2 / select.2
CommitLineData
fea681da
MK
1.\" Hey Emacs! This file is -*- nroff -*- source.
2.\"
3.\" This manpage is copyright (C) 1992 Drew Eckhardt,
4.\" copyright (C) 1995 Michael Shields.
5.\"
6.\" Permission is granted to make and distribute verbatim copies of this
7.\" manual provided the copyright notice and this permission notice are
8.\" preserved on all copies.
9.\"
10.\" Permission is granted to copy and distribute modified versions of this
11.\" manual under the conditions for verbatim copying, provided that the
12.\" entire resulting derived work is distributed under the terms of a
13.\" permission notice identical to this one.
c13182ef 14.\"
fea681da
MK
15.\" Since the Linux kernel and libraries are constantly changing, this
16.\" manual page may be incorrect or out-of-date. The author(s) assume no
17.\" responsibility for errors or omissions, or for damages resulting from
18.\" the use of the information contained herein. The author(s) may not
19.\" have taken the same level of care in the production of this manual,
20.\" which is licensed free of charge, as they might when working
21.\" professionally.
c13182ef 22.\"
fea681da
MK
23.\" Formatted or processed versions of this manual, if unaccompanied by
24.\" the source, must acknowledge the copyright and authors of this work.
25.\"
26.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
27.\" Modified 1995-05-18 by Jim Van Zandt <jrv@vanzandt.mv.com>
28.\" Sun Feb 11 14:07:00 MET 1996 Martin Schulze <joey@linux.de>
29.\" * layout slightly modified
30.\"
31.\" Modified Mon Oct 21 23:05:29 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
32.\" Modified Thu Feb 24 01:41:09 CET 2000 by aeb
33.\" Modified Thu Feb 9 22:32:09 CET 2001 by bert hubert <ahu@ds9a.nl>, aeb
34.\" Modified Mon Nov 11 14:35:00 PST 2002 by Ben Woodard <ben@zork.net>
d02aa9bc
MK
35.\" 2005-03-11, mtk, modified pselect() text (it is now a system
36.\" call in 2.6.16.
fea681da 37.\"
8c121f40 38.TH SELECT 2 2012-05-02 "Linux" "Linux Programmer's Manual"
fea681da 39.SH NAME
c13182ef 40select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO \-
35478399 41synchronous I/O multiplexing
fea681da 42.SH SYNOPSIS
cc9befa9 43.nf
97c1eac8 44/* According to POSIX.1-2001 */
fea681da
MK
45.br
46.B #include <sys/select.h>
47.sp
48/* According to earlier standards */
49.br
50.B #include <sys/time.h>
51.br
52.B #include <sys/types.h>
53.br
54.B #include <unistd.h>
55.sp
cc4615cc
MK
56.BI "int select(int " nfds ", fd_set *" readfds ", fd_set *" writefds ,
57.BI " fd_set *" exceptfds ", struct timeval *" timeout );
fea681da 58.sp
071dbad9 59.BI "void FD_CLR(int " fd ", fd_set *" set );
fea681da 60.br
521bf584 61.BI "int FD_ISSET(int " fd ", fd_set *" set );
fea681da 62.br
071dbad9 63.BI "void FD_SET(int " fd ", fd_set *" set );
fea681da 64.br
071dbad9 65.BI "void FD_ZERO(fd_set *" set );
9b813741 66.sp
9b813741
MK
67.B #include <sys/select.h>
68.sp
cc4615cc
MK
69.BI "int pselect(int " nfds ", fd_set *" readfds ", fd_set *" writefds ,
70.BI " fd_set *" exceptfds ", const struct timespec *" timeout ,
71.BI " const sigset_t *" sigmask );
fea681da 72.fi
cc4615cc
MK
73.sp
74.in -4n
75Feature Test Macro Requirements for glibc (see
76.BR feature_test_macros (7)):
77.in
78.sp
79.BR pselect ():
80_POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600
fea681da 81.SH DESCRIPTION
e511ffb6 82.BR select ()
fea681da 83and
e511ffb6 84.BR pselect ()
39179b3e 85allow a program to monitor multiple file descriptors,
5e01a1de
MK
86waiting until one or more of the file descriptors become "ready"
87for some class of I/O operation (e.g., input possible).
39179b3e 88A file descriptor is considered ready if it is possible to
c13182ef 89perform the corresponding I/O operation (e.g.,
5e01a1de
MK
90.BR read (2))
91without blocking.
fea681da 92.PP
5e01a1de
MK
93The operation of
94.BR select ()
95and
96.BR pselect ()
97is identical, with three differences:
fea681da
MK
98.TP
99(i)
e511ffb6 100.BR select ()
cc9befa9 101uses a timeout that is a
fea681da
MK
102.I struct timeval
103(with seconds and microseconds), while
e511ffb6 104.BR pselect ()
fea681da
MK
105uses a
106.I struct timespec
107(with seconds and nanoseconds).
108.TP
109(ii)
e511ffb6 110.BR select ()
cc9befa9 111may update the
fea681da 112.I timeout
cc9befa9 113argument to indicate how much time was left.
e511ffb6 114.BR pselect ()
cc9befa9 115does not change this argument.
fea681da
MK
116.TP
117(iii)
e511ffb6 118.BR select ()
cc9befa9 119has no
fea681da 120.I sigmask
cc9befa9 121argument, and behaves as
e511ffb6 122.BR pselect ()
fea681da
MK
123called with NULL
124.IR sigmask .
125.PP
c13182ef 126Three independent sets of file descriptors are watched.
22f348ca 127Those listed in
fea681da
MK
128.I readfds
129will be watched to see if characters become
130available for reading (more precisely, to see if a read will not
e9496f74 131block; in particular, a file descriptor is also ready on end-of-file),
fea681da
MK
132those in
133.I writefds
134will be watched to see if a write will not block, and
135those in
136.I exceptfds
c13182ef
MK
137will be watched for exceptions.
138On exit, the sets are modified in place
22f348ca
MK
139to indicate which file descriptors actually changed status.
140Each of the three file descriptor sets may be specified as NULL
c13182ef 141if no file descriptors are to be watched for the corresponding class
22f348ca 142of events.
fea681da
MK
143.PP
144Four macros are provided to manipulate the sets.
e511ffb6 145.BR FD_ZERO ()
21045df8 146clears a set.
e511ffb6 147.BR FD_SET ()
fea681da 148and
e511ffb6 149.BR FD_CLR ()
22f348ca 150respectively add and remove a given file descriptor from a set.
e511ffb6 151.BR FD_ISSET ()
c13182ef 152tests to see if a file descriptor is part of the set;
22f348ca 153this is useful after
e511ffb6 154.BR select ()
fea681da
MK
155returns.
156.PP
6efed4df 157.I nfds
22f348ca 158is the highest-numbered file descriptor in any of the three sets, plus 1.
fea681da 159.PP
8c121f40 160The
fea681da 161.I timeout
8c121f40 162argument specifies the minimum interval that
e511ffb6 163.BR select ()
8c121f40
MK
164should block waiting for a file descriptor to become ready.
165(This interval will be rounded up to the system clock granularity,
166and kernel scheduling delays mean that the blocking interval
167may overrun by a small amount.)
485eb4ad
MK
168If both fields of the
169.I timeval
c808bb16 170structure are zero, then
e511ffb6 171.BR select ()
485eb4ad 172returns immediately.
c13182ef
MK
173(This is useful for polling.)
174If
fea681da
MK
175.I timeout
176is NULL (no timeout),
e511ffb6 177.BR select ()
fea681da
MK
178can block indefinitely.
179.PP
180.I sigmask
181is a pointer to a signal mask (see
182.BR sigprocmask (2));
183if it is not NULL, then
e511ffb6 184.BR pselect ()
fea681da
MK
185first replaces the current signal mask by the one pointed to by
186.IR sigmask ,
2d986c92 187then does the "select" function, and then restores the original
cc9befa9 188signal mask.
fea681da 189.PP
d02aa9bc
MK
190Other than the difference in the precision of the
191.I timeout
c13182ef 192argument, the following
d02aa9bc
MK
193.BR pselect ()
194call:
195.nf
196
c13182ef 197 ready = pselect(nfds, &readfds, &writefds, &exceptfds,
d02aa9bc
MK
198 timeout, &sigmask);
199
200.fi
201is equivalent to
202.I atomically
203executing the following calls:
204.nf
205
206 sigset_t origmask;
207
208 sigprocmask(SIG_SETMASK, &sigmask, &origmask);
209 ready = select(nfds, &readfds, &writefds, &exceptfds, timeout);
210 sigprocmask(SIG_SETMASK, &origmask, NULL);
211.fi
212.PP
c13182ef 213The reason that
e511ffb6 214.BR pselect ()
d02aa9bc
MK
215is needed is that if one wants to wait for either a signal
216or for a file descriptor to become ready, then
c13182ef 217an atomic test is needed to prevent race conditions.
d02aa9bc 218(Suppose the signal handler sets a global flag and
c13182ef
MK
219returns.
220Then a test of this global flag followed by a call of
fea681da
MK
221.BR select ()
222could hang indefinitely if the signal arrived just after the test
c13182ef 223but just before the call.
d02aa9bc 224By contrast,
e511ffb6 225.BR pselect ()
fea681da
MK
226allows one to first block signals, handle the signals that have come in,
227then call
228.BR pselect ()
229with the desired
230.IR sigmask ,
231avoiding the race.)
fea681da
MK
232.SS "The timeout"
233The time structures involved are defined in
234.I <sys/time.h>
235and look like
236
088a639b 237.in +4n
fea681da 238.nf
c13182ef 239struct timeval {
fea681da
MK
240 long tv_sec; /* seconds */
241 long tv_usec; /* microseconds */
242};
243.fi
a08ea57c 244.in
fea681da
MK
245
246and
247
088a639b 248.in +4n
fea681da
MK
249.nf
250struct timespec {
251 long tv_sec; /* seconds */
252 long tv_nsec; /* nanoseconds */
253};
254.fi
a08ea57c 255.in
fea681da 256
97c1eac8 257(However, see below on the POSIX.1-2001 versions.)
fea681da
MK
258.PP
259Some code calls
e511ffb6 260.BR select ()
fea681da 261with all three sets empty,
79b8032e 262.I nfds
22f348ca 263zero, and a non-NULL
fea681da
MK
264.I timeout
265as a fairly portable way to sleep with subsecond precision.
266.PP
c13182ef 267On Linux,
e511ffb6 268.BR select ()
fea681da
MK
269modifies
270.I timeout
271to reflect the amount of time not slept; most other implementations
77f00d75 272do not do this.
d9bfdb9c 273(POSIX.1-2001 permits either behavior.)
77f00d75 274This causes problems both when Linux code which reads
fea681da
MK
275.I timeout
276is ported to other operating systems, and when code is ported to Linux
0c2ec4f1 277that reuses a \fIstruct timeval\fP for multiple
e511ffb6 278.BR select ()s
c13182ef
MK
279in a loop without reinitializing it.
280Consider
fea681da
MK
281.I timeout
282to be undefined after
e511ffb6 283.BR select ()
fea681da 284returns.
d9bfdb9c 285.\" .PP - it is rumored that:
fea681da
MK
286.\" On BSD, when a timeout occurs, the file descriptor bits are not changed.
287.\" - it is certainly true that:
288.\" Linux follows SUSv2 and sets the bit masks to zero upon a timeout.
289.SH "RETURN VALUE"
290On success,
e511ffb6 291.BR select ()
fea681da 292and
e511ffb6 293.BR pselect ()
22f348ca
MK
294return the number of file descriptors contained in the three returned
295descriptor sets (that is, the total number of bits that are set in
fea681da
MK
296.IR readfds ,
297.IR writefds ,
298.IR exceptfds )
299which may be zero if the timeout expires before anything interesting happens.
300On error, \-1 is returned, and
301.I errno
302is set appropriately; the sets and
303.I timeout
304become undefined, so do not
305rely on their contents after an error.
306.SH ERRORS
307.TP
308.B EBADF
309An invalid file descriptor was given in one of the sets.
c13182ef 310(Perhaps a file descriptor that was already closed,
6efed4df 311or one on which an error has occurred.)
fea681da
MK
312.TP
313.B EINTR
01538d0d
MK
314A signal was caught; see
315.BR signal (7).
fea681da
MK
316.TP
317.B EINVAL
6efed4df 318.I nfds
fea681da
MK
319is negative or the value contained within
320.I timeout
321is invalid.
322.TP
323.B ENOMEM
6efed4df 324unable to allocate memory for internal tables.
a1d5f77c
MK
325.SH VERSIONS
326.BR pselect ()
327was added to Linux in kernel 2.6.16.
328Prior to this,
329.BR pselect ()
330was emulated in glibc (but see BUGS).
fea681da 331.SH "CONFORMING TO"
c13182ef
MK
332.BR select ()
333conforms to POSIX.1-2001 and
3344.4BSD
cc9befa9 335.RB ( select ()
c13182ef
MK
336first appeared in 4.2BSD).
337Generally portable to/from
fea681da 338non-BSD systems supporting clones of the BSD socket layer (including
c13182ef
MK
339System V variants).
340However, note that the System V variant typically
fea681da
MK
341sets the timeout variable before exit, but the BSD variant does not.
342.PP
e511ffb6 343.BR pselect ()
97c1eac8
MK
344is defined in POSIX.1g, and in
345POSIX.1-2001.
fea681da 346.SH NOTES
c13182ef
MK
347An
348.I fd_set
349is a fixed size buffer.
350Executing
22f348ca 351.BR FD_CLR ()
c13182ef 352or
22f348ca
MK
353.BR FD_SET ()
354with a value of
fea681da 355.I fd
682edefb
MK
356that is negative or is equal to or larger than
357.B FD_SETSIZE
358will result
c13182ef
MK
359in undefined behavior.
360Moreover, POSIX requires
fea681da
MK
361.I fd
362to be a valid file descriptor.
363
364Concerning the types involved, the classical situation is that
22f348ca 365the two fields of a
c13182ef 366.I timeval
e3e25559
MK
367structure are typed as
368.I long
369(as shown above), and the structure is defined in
fea681da 370.IR <sys/time.h> .
97c1eac8 371The POSIX.1-2001 situation is
fea681da 372
088a639b 373.in +4n
fea681da
MK
374.nf
375struct timeval {
376 time_t tv_sec; /* seconds */
377 suseconds_t tv_usec; /* microseconds */
378};
379.fi
a08ea57c 380.in
fea681da 381
22f348ca 382where the structure is defined in
fea681da 383.I <sys/select.h>
c13182ef
MK
384and the data types
385.I time_t
386and
387.I suseconds_t
22f348ca 388are defined in
fea681da
MK
389.IR <sys/types.h> .
390.LP
391Concerning prototypes, the classical situation is that one should
392include
393.I <time.h>
394for
e511ffb6 395.BR select ().
97c1eac8 396The POSIX.1-2001 situation is that one should include
fea681da
MK
397.I <sys/select.h>
398for
e511ffb6 399.BR select ()
fea681da 400and
e511ffb6 401.BR pselect ().
8b98e6fc 402
fea681da
MK
403Libc4 and libc5 do not have a
404.I <sys/select.h>
405header; under glibc 2.0 and later this header exists.
406Under glibc 2.0 it unconditionally gives the wrong prototype for
8b98e6fc
MK
407.BR pselect ().
408Under glibc 2.1 to 2.2.1 it gives
e511ffb6 409.BR pselect ()
fea681da
MK
410when
411.B _GNU_SOURCE
8b98e6fc
MK
412is defined.
413Since glibc 2.2.2 the requirements are as shown in the SYNOPSIS.
4fb31341 414.SS "Linux Notes"
a16eec1e 415The
77f00d75 416.BR pselect ()
a16eec1e
MK
417interface described in this page is implemented by glibc.
418The underlying Linux system call is named
419.BR pselect6 ().
420This system call has somewhat different behavior from the gibc
421wrapper function.
422
423The Linux
424.BR pselect6 ()
c13182ef
MK
425system call modifies its
426.I timeout
2f11acf5 427argument.
d9bfdb9c 428However, the glibc wrapper function hides this behavior
77f00d75
MK
429by using a local variable for the timeout argument that
430is passed to the system call.
c13182ef 431Thus, the glibc
77f00d75 432.BR pselect ()
d53de2a7
MK
433function does not modify its
434.I timeout
435argument;
d9bfdb9c 436this is the behavior required by POSIX.1-2001.
a16eec1e
MK
437
438The final argument of the
439.BR pselect6()
440system call is not a
441.I "sigset_t\ *"
442pointer, but is instead a structure of the form:
443.in +4
444.nf
445
446struct {
447 const sigset_t *ss; /* Pointer to signal set */
448 size_t ss_len; /* Size (in bytes) of object pointed
449 to by 'ss' */
450};
451
452.fi
453.in
454This allows the system call to obtain both
455a pointer to the signal set and its size,
456while allowing for the fact that most architectures
457support a maximum of 6 arguments to a system call.
fea681da 458.SH BUGS
cc9befa9 459Glibc 2.0 provided a version of
e511ffb6 460.BR pselect ()
c13182ef
MK
461that did not take a
462.I sigmask
cc9befa9
MK
463argument.
464
3fa2e4b9 465Starting with version 2.1, glibc provided an emulation of
c13182ef 466.BR pselect ()
3fa2e4b9 467that was implemented using
cc9befa9
MK
468.BR sigprocmask (2)
469and
470.BR select ().
3fa2e4b9 471This implementation remained vulnerable to the very race condition that
cc9befa9
MK
472.BR pselect ()
473was designed to prevent.
3fa2e4b9
MK
474Modern versions of glibc use the (race-free)
475.BR pselect ()
476system call on kernels where it is provided.
477
cc9befa9 478On systems that lack
1d0ab600 479.BR pselect (),
c13182ef 480reliable (and more portable) signal trapping can be achieved
9d0637e5
MK
481using the self-pipe trick.
482In this technique,
483a signal handler writes a byte to a pipe whose other end
c13182ef 484is monitored by
cc9befa9 485.BR select ()
9d0637e5
MK
486in the main program.
487(To avoid possibly blocking when writing to a pipe that may be full
488or reading from a pipe that may be empty,
489nonblocking I/O is used when reading from and writing to the pipe.)
fea681da
MK
490
491Under Linux,
e511ffb6 492.BR select ()
fea681da 493may report a socket file descriptor as "ready for reading", while
c13182ef
MK
494nevertheless a subsequent read blocks.
495This could for example
fea681da 496happen when data has arrived but upon examination has wrong
c13182ef
MK
497checksum and is discarded.
498There may be other circumstances
2f11acf5 499in which a file descriptor is spuriously reported as ready.
fea681da
MK
500.\" Stevens discusses a case where accept can block after select
501.\" returns successfully because of an intervening RST from the client.
682edefb
MK
502Thus it may be safer to use
503.B O_NONBLOCK
504on sockets that should not block.
fea681da 505.\" Maybe the kernel should have returned EIO in such a situation?
5766b196
MK
506
507On Linux,
508.BR select ()
509also modifies
510.I timeout
511if the call is interrupted by a signal handler (i.e., the
512.B EINTR
513error return).
514This is not permitted by POSIX.1-2001.
515The Linux
2777b1ca 516.BR pselect ()
5766b196
MK
517system call has the same behavior,
518but the glibc wrapper hides this behavior by internally copying the
519.I timeout
520to a local variable and passing that variable to the system call.
2b2581ee
MK
521.SH EXAMPLE
522.nf
523#include <stdio.h>
af9c7ff2 524#include <stdlib.h>
2b2581ee
MK
525#include <sys/time.h>
526#include <sys/types.h>
527#include <unistd.h>
528
529int
530main(void)
531{
532 fd_set rfds;
533 struct timeval tv;
534 int retval;
535
536 /* Watch stdin (fd 0) to see when it has input. */
537 FD_ZERO(&rfds);
538 FD_SET(0, &rfds);
539
540 /* Wait up to five seconds. */
541 tv.tv_sec = 5;
542 tv.tv_usec = 0;
543
544 retval = select(1, &rfds, NULL, NULL, &tv);
545 /* Don't rely on the value of tv now! */
546
547 if (retval == \-1)
548 perror("select()");
549 else if (retval)
550 printf("Data is available now.\\n");
551 /* FD_ISSET(0, &rfds) will be true. */
552 else
553 printf("No data within five seconds.\\n");
554
555 exit(EXIT_SUCCESS);
556}
557.fi
fea681da
MK
558.SH "SEE ALSO"
559For a tutorial with discussion and examples, see
560.BR select_tut (2).
561.LP
562For vaguely related stuff, see
563.BR accept (2),
564.BR connect (2),
565.BR poll (2),
566.BR read (2),
567.BR recv (2),
568.BR send (2),
569.BR sigprocmask (2),
50e5322c 570.BR write (2),
1d7c4d16
MK
571.BR epoll (7),
572.BR time (7)