select(2)select(2)NAMEselect(), pselect(), FD_CLR(), FD_ISSET(), FD_SET(), FD_ZERO() - syn‐
chronous I/O multiplexing
SYNOPSIS
For UNIX 2003:
For Standards prior to UNIX 2003:
For Backward Compatibility Only: (_XOPEN_SOURCE_EXTENDED not defined)
DESCRIPTION
Prototypes for are available by including as required by standards
prior to UNIX 2003. The UNIX 2003 standard requires including to expose
these prototypes along with Refer to the man page for information on
how to compile programs by using the correct namespace for different
UNIX standards.
The and functions indicate which of the specified file descriptors is
ready for reading, ready for writing, or has an error condition pend‐
ing. If the specified condition is false for all of the specified file
descriptors, and block, up to the specified timeout interval, until the
specified condition is true for at least one of the specified file
descriptors.
The and functions support regular files, terminal and pseudo-terminal
devices, STREAMS-based files, FIFOs and pipes. The behaviour of and on
file descriptors that refer to other file types is unspecified.
The nfds argument specifies the range of file descriptors to be tested.
The and functions test file descriptors in the range of 0 to nfds −1.
File descriptor f is represented by the bit 1<<f in the masks. More
formally, a file descriptor is represented by:
If the readfds argument is not a null pointer, it points to an object
of type fd_set that on input specifies the file descriptors to be
checked for being ready to read, and on output indicates which file
descriptors are ready to read.
If the writefds argument is not a null pointer, it points to an object
of type fd_set that on input specifies the file descriptors to be
checked for being ready to write, and on output indicates which file
descriptors are ready to write.
If the errorfds argument is not a null pointer, it points to an object
of type fd_set that on input specifies the file descriptors to be
checked for error conditions pending, and on output indicates which
file descriptors have error conditions pending.
On successful completion, the objects pointed to by the readfds,
writefds, and errorfds arguments are modified to indicate which file
descriptors are ready for reading, ready for writing, or have an error
condition pending, respectively. For each file descriptor less than
nfds, the corresponding bit will be set on successful completion if it
was set on input and the associated condition is true for that file
descriptor.
If the timeout argument is not a null pointer, it specifies a maximum
interval to wait for the selection to complete. The timeout argument
points to an object of type for and to an object of type for If the
members of these structures are 0, or will not block. If the timeout
argument is a null pointer, or will block until an event causes one of
the masks to be returned with a valid (non-zero) value. If the time
limit expires before any event occurs that would cause one of the masks
to be set to a non-zero value, or completes successfully and returns 0.
Implementations may place limitations on the maximum timeout interval
supported. On all implementations, the maximum timeout interval sup‐
ported will be at least 31 days. If the timeout argument specifies a
timeout interval greater than the implementation-dependent maximum
value, the maximum value will be used as the actual timeout value.
Implementations may also place limitations on the granularity of time‐
out intervals. If the requested timeout interval requires a finer
granularity than the implementation supports, the actual timeout inter‐
val will be rounded up to the next supported value.
If sigmask is not a null pointer, then the function shall replace the
signal mask of the process by the set of signals pointed to by sigmask
before examining the descriptors, and shall restore the signal mask of
the process before returning.
If the readfds, writefds, and errorfds arguments are all null pointers
and the timeout argument is not a null pointer, or blocks for the time
specified, or until interrupted by a signal. If the readfds, writefds,
and errorfds arguments are all null pointers and the timeout argument
is a null pointer, or blocks until interrupted by a signal.
File descriptors associated with regular files always select true for
ready to read, ready to write, and error conditions.
On failure, the objects pointed to by the readfds, writefds, and
errorfds arguments are not modified. If the timeout interval expires
without the specified condition being true for any of the specified
file descriptors, the objects pointed to by the readfds, writefds, and
errorfds arguments have all bits set to 0.
Ttys and sockets are ready for reading if a would not block for one or
more of the following reasons:
· input data is available.
· an error condition exists, such as a broken pipe, no carrier, or a
lost connection.
Similarly, ttys and sockets are ready for writing if a would not block
for one or more of the following reasons:
· output data can be accepted.
· an error condition exists, such as a broken pipe, no carrier, or a
lost connection.
TCP sockets select true on reads only for normal data. They do not
select true on reads if out-of-band data ("urgent" data) arrives.
TCP sockets select true on exceptions for out-of-band data.
AF_CCITT sockets select true on reads for normal and out-of-band data
and information, including supervisory frames.
Pipes are ready for reading if there is any data in the pipe, or if
there are no writers left for the pipe. Pipes are ready for writing if
there is room for more data in the pipe AND there are one or more read‐
ers for the pipe, OR there are no readers left for the pipe. returns
the same results for a pipe whether a file descriptor associated with
the read-only end or the write-only end of the pipe is used, since both
file descriptors refer to the same underlying pipe. So a of a read-
only file descriptor that is associated with a pipe can return ready to
write, even though that particular file descriptor cannot be written
to.
File descriptor masks of type fd_set can be initialized and tested with
and It is unspecified whether each of these is a macro or a function.
If a macro definition is suppressed in order to access an actual func‐
tion, or a program defines an external identifier with any of these
names, the behaviour is undefined.
Clears the bit for the file descriptor fd in the file descriptor set
fdset.
Returns a non-zero value if the bit for the file descriptor
fd is set in the file descriptor set pointed to by fdset, and 0
otherwise.
Sets the bit for the file descriptor
fd in the file descriptor set fdset.
Initializes the file descriptor set
fdset to have zero bits for all file descriptors. The behaviour
of these macros is undefined if the fd argument is less than 0
or greater than or equal to
The use of a timeout does not affect any pending timers set up by or
On successful completion, the object pointed to by the timeout argument
of may be modified.
The is used in the definition of structure. It is set to a value of
2048 to accommodate 2048 file descriptors. Any user code that uses or
the structure should redefine to a smaller value (greater than or equal
to the number of open files the process will have) in order to save
space and execution time. Similarly, any user code that wants to test
more than 2048 file descriptors should redefine to the required higher
value.
The user can also allocate the space for structure dynamically, depend‐
ing upon the number of file descriptors to be tested. The following
code segment illustrates the basic concepts.
RETURN VALUE
and return no value. returns a non-zero value if the bit for the
file descriptor fd is set in the file descriptor set pointed to by
fdset, and 0 otherwise.
On successful completion, and return the total number of bits set in
the bit masks. Otherwise, −1 is returned, and is set to indicate the
error.
ERRORS
Under the following conditions, and fail and set to:
One or more of the file descriptor sets specified a file descriptor
that is not a valid open file descriptor. This could
happen either if the file descriptor sets are not ini‐
tialized or nfds argument is greater than
The function was interrupted before any of the
selected events occurred and before the timeout interval
expired. If has been set for the interrupting signal,
it is implementation-dependent whether the function
restarts or returns with
One or more of the pointers was invalid.
The reliable detection of this error is implementation
dependent.
An invalid timeout interval was specified.
Valid values for the number of nanoseconds (in should be
a non-negative integer less than 1,000,000,000. For the
number of microseconds (in struct timeval), a non-nega‐
tive integer less than 1,000,000 should be used. Sec‐
onds should be specified using a non-negative integer.
The nfds argument is less than 0, or is greater than or
equal to the value of which specifies the absolute maxi‐
mum number of files a process can have open at one time.
If the resource limit for a process is less than or
equal to 2048, is considered to be 2048.
One of the specified file descriptors refers to a STREAM or
multiplexer that is linked (directly or indirectly)
downstream from a multiplexer.
EXAMPLES
The following call to checks if any of 4 terminals are ready for read‐
ing. times out after 5 seconds if no terminals are ready for reading.
Note that the code for opening the terminals or reading from the termi‐
nals is not shown in this example. Also, note that this example must
be modified if the calling process has more than 32 file descriptors
open. Following this first example is an example of select with more
than 32 file descriptors.
The following example is the same as the previous example, except that
it works for more than 32 open files. Definitions for and are in
WARNINGS
The file descriptor masks are always modified on return, even if the
call returns as the result of a timeout.
DEPENDENCIES
supports the following devices and file types:
· pipes
· fifo special files (named pipes)
· all serial devices
· All ITEs (internal terminal emulators) and HP-HIL input devices
· lan(7) special files
· pty(7) special files
· sockets
AUTHOR
was developed by HP and the University of California, Berkeley.
SEE ALSOfcntl(2), poll(2), read(2), sigprocmask(2), write(2), thread_safety(5),
standards(5),
select(2)