NAME
pselect
—
synchronous I/O multiplexing a la
POSIX.1g
LIBRARY
library “libc”
SYNOPSIS
#include
<sys/select.h>
int
pselect
(int nfds,
fd_set * restrict readfds, fd_set *
restrict writefds, fd_set * restrict exceptfds,
const struct timespec * restrict timeout,
const sigset_t * restrict newsigmask);
DESCRIPTION
Thepselect
()
function was introduced by IEEE Std 1003.1g-2000
(“POSIX.1g”) as a slightly stronger version of
select(2). The nfds,
readfds, writefds, and
exceptfds arguments are all identical to the analogous
arguments of
select
().
The timeout argument in
pselect
() points to a const struct
timespec rather than the (modifiable) struct
timeval used by select
(); as in
select
(), a null pointer may be passed to indicate
that pselect
() should wait indefinitely. Finally,
newsigmask specifies a signal mask which is set while
waiting for input. When pselect
() returns, the
original signal mask is restored.
See select(2) for a more detailed discussion of the semantics of this interface, and for macros used to manipulate the fd_set data type.
RETURN VALUES
The pselect
() function returns the same
values and under the same conditions as
select
().
ERRORS
The pselect
() function may fail for any of
the reasons documented for
select(2) and (if a signal mask is provided)
sigprocmask(2).
SEE ALSO
STANDARDS
The pselect
() function conforms to
IEEE Std 1003.1-2001 (“POSIX.1”).
HISTORY
The pselect
() function first appeared in
DragonFly 1.11.
AUTHORS
This manual page was originally written by Garrett Wollman <wollman@FreeBSD.org> for FreeBSD and later modified for DragonFly.
BUGS
The pselect
() implementation in libc_r
(user multi-threading) does not mask signals, calls
select
(), and restores the original signal mask
atomically. A calling user thread using pselect
() to
block until either a signal occurs or some descriptor changes may therefore
block forever. The pselect
() implementations in
libthread_xu (kernel multi-threading) and libc (single-threading) operate
atomically and are therefore race-free.