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)

illumos February 5, 2008 SIGWAITINFO(3C)