Originální popis anglicky:
sigwaitinfo, sigtimedwait - synchronously wait for queued signals
Návod, kniha: Linux Programmer's Manual
#include <signal.h>
int sigwaitinfo(const sigset_t *set, siginfo_t
*info);
int sigtimedwait(const sigset_t *set, siginfo_t
*info, const struct timespec timeout);
sigwaitinfo() suspends execution of the calling process until one of the
signals in
set is delivered. (If one of the signals in
set is
already pending for the calling process,
sigwaitinfo() will return
immediately with information about that signal.)
sigwaitinfo() removes the delivered signal from the calling process's
list of pending signals and returns the signal number as its function result.
If the
info argument is not
NULL, then it returns a structure of
type
siginfo_t (see
sigaction(2)) containing information about
the signal.
Signals returned via
sigwaitinfo() are delivered in the usual order; see
signal(7) for further details.
sigtimedwait() operates in exactly the same way as
sigwaitinfo()
except that it has an additional argument,
timeout, which enables an
upper bound to be placed on the time for which the process is suspended. This
argument is of the following type:
struct timespec {
long tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
}
If both fields of this structure are specified as 0, a poll is performed:
sigtimedwait() returns immediately, either with information about a
signal that was pending for the caller, or with an error if none of the
signals in
set was pending.
On success, both
sigwaitinfo() and
sigtimedwait() return a signal
number (i.e., a value greater than zero). On failure both calls return -1,
with
errno set to indicate the error.
- EAGAIN
- No signal in set was delivered within the
timeout period specified to sigtimedwait().
- EINTR
- The wait was interrupted by a signal handler. (This handler
was for a signal other than one of those in set.)
- EINVAL
- timeout was invalid.
In normal usage, the caller blocks the signals in
set via a prior call to
sigprocmask() (so that the default disposition for these signals does
not occur if they are delivered between successive calls to
sigwaitinfo()
or sigtimedwait()) and does not establish
handlers for these signals.
POSIX leaves the meaning of a
NULL value for the
timeout argument
of
sigtimedwait() unspecified, permitting the possibility that this has
the same meaning as a call to
sigwaitinfo(), and indeed this is what is
done on Linux.
POSIX 1003.1-2001
kill(2),
sigaction(2),
signal(2),
sigpending(2),
sigprocmask(2),
sigqueue(2),
sigsetops(3),
signal(7)