OSDN Git Service

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