synchronous I/O multiplexing
Standard C Library (libc, -lc)
() system call examines the I/O
descriptor sets whose addresses are passed in
to see if some of their descriptors
are ready for reading, are ready for writing, or have an exceptional condition
pending, respectively. The only exceptional condition detectable is
out-of-band data received on a socket. The first
descriptors are checked in each set;
i.e., the descriptors from 0 through
descriptor sets are examined. On return, select
replaces the given descriptor sets with subsets consisting of those
descriptors that are ready for the requested operation. The
() system call returns the total number of
ready descriptors in all the sets.
The descriptor sets are stored as bit fields in arrays of integers. The
following macros are provided for manipulating such descriptor sets:
initializes a descriptor set fdset
) includes a particular descriptor
) is non-zero if
is a member of
, zero otherwise. The behavior of these
macros is undefined if a descriptor value is less than zero or greater than or
, which is normally at
least equal to the maximum number of descriptors supported by the system.
is not a null pointer, it specifies
the maximum interval to wait for the selection to complete. System activity
can lengthen the interval by an indeterminate amount.
is a null pointer, the select blocks
To effect a poll, the timeout
not be a null pointer, but it should point to a zero-valued timeval structure.
Any of readfds
may be given as null pointers if no
descriptors are of interest.
() system call returns the number of
ready descriptors that are contained in the descriptor sets, or -1 if an error
occurred. If the time limit expires, select
returns 0. If select
() returns with an error,
including one due to an interrupted system call, the descriptor sets will be
An error return from select
- One of the descriptor sets specified an invalid
- One of the arguments
timeout points to an invalid
- A signal was delivered before the time limit expired and
before any of the selected events occurred.
- The specified time limit is invalid. One of its components
is negative or too large.
- The nfds argument was
The default size of
1024. In order to accommodate programs which might potentially use a larger
number of open files with select
(), it is
possible to increase this size by having the program define
before the inclusion of any
header which includes
is greater than the number of open
() is not guaranteed to examine the
unused file descriptors. For historical reasons,
() will always examine the first 256
() system call and
() macros conform with
IEEE Std 1003.1-2001
() system call appeared in
Version 2 of the Single UNIX Specification
allows systems to modify the original timeout
in place. Thus, it is unwise to assume that the timeout value will be
unmodified by the select
() system call.
does not modify the return value, which can
cause problems for applications ported from other systems.