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)