SIGWAITINFO(3C) Standard C Library Functions SIGWAITINFO(3C)
NAME
sigwaitinfo, sigtimedwait - wait for queued signals
SYNOPSIS
#include <signal.h>
int sigwaitinfo(
const sigset_t *restrict set,
siginfo_t *restrict info);
int sigtimedwait(
const sigset_t *restrict set,
siginfo_t *restrict info,
const struct timespec *restrict timeout);
DESCRIPTION
The
sigwaitinfo() function selects the pending signal from the set
specified by
set. Should any of multiple pending signals in the range
SIGRTMIN to
SIGRTMAX be selected, it will be the lowest numbered one. The
selection order between realtime and non-realtime signals, or between
multiple pending non-realtime signals, is unspecified. If no signal in
set is pending at the time of the call, the calling thread is suspended
until one or more signals in
set become pending or until it is
interrupted by an unblocked, caught signal.
The
sigwaitinfo() function behaves the same as the
sigwait(2) function
if the
info argument is
NULL. If the
info argument is non-
NULL, the
sigwaitinfo() function behaves the same as
sigwait(2), except that the
selected signal number is stored in the
si_signo member, and the cause of
the signal is stored in the
si_code member. If any value is queued to the
selected signal, the first such queued value is dequeued and, if the
info argument is non-
NULL, the value is stored in the
si_value member of
info.
The system resource used to queue the signal will be released and made
available to queue other signals. If no value is queued, the content of
the
si_value member is undefined. If no further signals are queued for
the selected signal, the pending indication for that signal will be
reset. If the value of the
si_code member is
SI_NOINFO, only the
si_signo member of
siginfo_t is meaningful, and the value of all other members is
unspecified.
The
sigtimedwait() function behaves the same as
sigwaitinfo() except
that if none of the signals specified by
set are pending,
sigtimedwait() waits for the time interval specified in the
timespec structure
referenced by
timeout. If the
timespec structure pointed to by
timeout is
zero-valued and if none of the signals specified by
set are pending, then
sigtimedwait() returns immediately with an error. If
timeout is the
NULL pointer, the behavior is unspecified.
If, while
sigwaitinfo() or
sigtimedwait() is waiting, a signal occurs
which is eligible for delivery (that is, not blocked by the process
signal mask), that signal is handled asynchronously and the wait is
interrupted.
RETURN VALUES
Upon successful completion (that is, one of the signals specified by
set is pending or is generated)
sigwaitinfo() and
sigtimedwait() will return
the selected signal number. Otherwise, the function returns
-1 and sets
errno to indicate the error.
ERRORS
The
sigwaitinfo() and
sigtimedwait() functions will fail if:
EINTR The wait was interrupted by an unblocked, caught signal.
ENOSYS The
sigwaitinfo() and
sigtimedwait() functions are not
supported.
The
sigtimedwait() function will fail if:
EAGAIN No signal specified by
set was generated within the specified
timeout period.
The
sigwaitinfo() and
sigtimedwait() functions may fail if:
EFAULT The
set,
info, or
timeout argument points to an invalid
address.
The
sigtimedwait() function may fail if:
EINVAL The
timeout argument specified a
tv_nsec value less than zero
or greater than or equal to 1000 million. The system only
checks for this error if no signal is pending in
set and it is
necessary to wait.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-------------------+
|Interface Stability | Committed |
+--------------------+-------------------+
|MT-Level | Async-Safe |
+--------------------+-------------------+
|Standard | See
standards(7). |
+--------------------+-------------------+
SEE ALSO
time(2),
sigqueue(3C),
siginfo.h(3HEAD),
signal.h(3HEAD),
time.h(3HEAD),
attributes(7),
standards(7) February 5, 2008
SIGWAITINFO(3C)