168 lines
4.3 KiB
Groff
168 lines
4.3 KiB
Groff
'\"macro stdmacro
|
|
.\" Copyright (c) 1983 Regents of the University of California.
|
|
.\" All rights reserved. The Berkeley software License Agreement
|
|
.\" specifies the terms and conditions for redistribution.
|
|
.\"
|
|
.\" @(#)select.2 6.5 (Berkeley) 5/15/86
|
|
.\"
|
|
.if n .pH man2.select @(#)select 30.3 of 2/1/86
|
|
.TH SELECT 2
|
|
.UC 5
|
|
.SH NAME
|
|
select \- synchronous I/O multiplexing
|
|
.SH SYNOPSIS
|
|
.B #include <unistd.h>
|
|
.br
|
|
.B #include <sys/types.h>
|
|
.br
|
|
.B #include <bstring.h>
|
|
.br
|
|
.B #include <sys/time.h>
|
|
.sp
|
|
.B "int select (int nfds, fd_set \(**readfds, fd_set \(**writefds,"
|
|
.br
|
|
.B "\t\tfd_set \(**exceptfds, struct timeval \(**timeout);"
|
|
.sp
|
|
.nf
|
|
.B FD_SET(fd, &fdset)
|
|
.B FD_CLR(fd, &fdset)
|
|
.B FD_ISSET(fd, &fdset)
|
|
.B FD_ZERO(&fdset)
|
|
.B int fd;
|
|
.B fd_set fdset;
|
|
.fi
|
|
.SH DESCRIPTION
|
|
.I Select
|
|
examines the I/O descriptor sets whose addresses are passed in
|
|
.IR readfds ,
|
|
.IR writefds ,
|
|
and
|
|
.I exceptfds
|
|
to see if some of their descriptors
|
|
are ready for reading, are ready for writing, or have an exceptional
|
|
condition pending, respectively.
|
|
The first
|
|
.I nfds
|
|
file descriptors are checked in each set;
|
|
i.e. the file descriptors from 0 through
|
|
.I nfds
|
|
\- 1
|
|
will be examined (see \f4getdtablehi\fP(3) for largest open descriptor).
|
|
On return,
|
|
.I select
|
|
replaces the given descriptor sets
|
|
with subsets consisting of those descriptors that are ready
|
|
for the requested operation.
|
|
The total number of ready descriptors in all the sets is the return value.
|
|
.PP
|
|
The descriptor sets are stored as bit fields in arrays of integers.
|
|
The following macros are provided for manipulating such descriptor sets:
|
|
.I "FD_ZERO(&fdset)"
|
|
initializes a descriptor set
|
|
.I fdset
|
|
to the null set.
|
|
.I "FD_SET(fd, &fdset)"
|
|
includes a particular descriptor
|
|
.I fd
|
|
in
|
|
.IR fdset .
|
|
.I "FD_CLR(fd, &fdset)"
|
|
removes
|
|
.I fd
|
|
from
|
|
.IR fdset .
|
|
.I "FD_ISSET(fd, &fdset)"
|
|
is nonzero if
|
|
.I fd
|
|
is a member of
|
|
.IR fdset ,
|
|
zero otherwise.
|
|
The behavior of these macros is undefined if
|
|
a descriptor value is less than zero or greater than or equal to
|
|
.IR FD_SETSIZE ,
|
|
which is normally at least equal
|
|
to the maximum number of descriptors supported by the system.
|
|
.PP
|
|
If
|
|
.I timeout
|
|
is a non-zero pointer, it specifies a maximum interval to wait for the
|
|
selection to complete. If
|
|
.I timeout
|
|
is a zero pointer, the select blocks indefinitely. To effect a poll, the
|
|
.I timeout
|
|
argument should be non-zero, pointing to a zero-valued timeval structure.
|
|
.PP
|
|
Any of
|
|
.IR readfds ,
|
|
.IR writefds ,
|
|
and
|
|
.I exceptfds
|
|
may be given as zero pointers if no descriptors are of interest.
|
|
.SH "RETURN VALUE"
|
|
.I Select
|
|
returns the number of ready descriptors that are contained in
|
|
the descriptor sets,
|
|
or \-1 if an error occurred.
|
|
If the time limit expires then
|
|
.I select
|
|
returns 0.
|
|
If
|
|
.I select
|
|
returns with an error,
|
|
including one due to an interrupted call,
|
|
the descriptor sets will be unmodified.
|
|
.SH "ERRORS
|
|
An error return from \f2select\fP indicates:
|
|
.TP 15
|
|
[EBADF]
|
|
One of the descriptor sets specified an invalid descriptor.
|
|
.TP 15
|
|
[EINTR]
|
|
A signal was delivered before the time limit expired and
|
|
before any of the selected events occurred.
|
|
.TP 15
|
|
[EINVAL]
|
|
The specified time limit is invalid. One of its components is
|
|
negative or too large.
|
|
.SH SEE ALSO
|
|
poll(2),
|
|
accept(2), connect(2), read(2), write(2), recv(2), send(2),
|
|
getdtablehi(3C).
|
|
.SH NOTES
|
|
Some devices do not support polling via the
|
|
.IR select (2)
|
|
and
|
|
.IR poll (2)
|
|
system calls. Doing a
|
|
.I select
|
|
or
|
|
.I poll
|
|
on a file descriptor associated with an "un-pollable" device will cause the
|
|
.I select
|
|
or
|
|
.I poll
|
|
to return immediately with a success value of 0 and the with the
|
|
corresponding file descriptor events of queried set true. For instance, if
|
|
a
|
|
.I select
|
|
or
|
|
.I poll
|
|
is performed on a read file descriptor associated with an un-pollable
|
|
device, the call would return immediately, even though there may be nothing
|
|
to read on the device. A subsequent
|
|
.IR read (2)
|
|
in this situation might return with a "bytes-read" count of 0 or might block
|
|
if the device supports read blocking. Devices which exhibit this behavior
|
|
(especially those from third-party vendors) should be suspected as not
|
|
supporting polling.
|
|
.SH BUGS
|
|
.I Select
|
|
should probably return the time remaining from the original timeout,
|
|
if any, by modifying the time value in place.
|
|
This may be implemented in future versions of the system.
|
|
Thus, it is unwise to assume that the timeout value will be unmodified
|
|
by the
|
|
.I select
|
|
call.
|
|
'\".so /pubs/tools/origin.bsd
|