SIGWAITINFO(2)

NOMBRE
sigwaitinfo, sigtimedwait - espera síncrona de señales encoladas

SINOPSIS
#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);

DESCRIPCIÓN
sigwaitinfo() suspende la ejecución del proceso invocador hasta que se comunica una de las señales en set. (Si una de las señales en set ya está siendo esperada por el proceso invocador, sigwaitinfo() regresará inmediatamente con información sobre la señal.)

sigwaitinfo() elimina la señal comunicada de la lista de señales pendientes del proceso invocador y devuelve el número de señal como resultado. Si el argumento info es distinto de NULL, devuelve una estructura del tipo siginfo_t (véase sigaction(2)) que contiene información sobre la señal.

Las señales devueltas via sigwaitinfo() son comunicadas en el orden habitual; véase signal(7) para más detalles.

sigtimedwait() opera de la misma forma que sigwaitinfo() salvo que tiene un argumento adicional, timeout, que habilita un límite superior de tiempo en el que el proceso puede estar suspendido. Este argumento es del siguiente tipo:

struct timespec {
    long    tv_sec;         /* seconds */
    long    tv_nsec;        /* nanoseconds */
}

Si ambos campos de esta estructura tienen valor 0, se realiza un sondeo: sigtimedwait() regresa inmediatamente, ya sea con información sobre una señal pendiente para el invocador, o con un error si no había señales pendientes en set.

VALOR DEVUELTO
En caso de éxito, tanto sigwaitinfo() como sigtimedwait() devuelven un número de señal (un valor mayor que cero). En caso de fallo ambas llamadas devuelven -1, y modifican errno para reflejar el error.

ERRORES

EAGAIN
    No se comunicó ninguna señal en set dentro del período timeout especificado a sigtimedwait().

EINVAL
    timeout inválido.

EINTR
    La espera fue interrumpida por un manejador de señales. (Este manejador se ocupa de una señal distinta de las que hay en set.)

OBSERVACIONES
Si se usa normalmente, el invocador bloquea las señales en set a través de una llamada previa a sigprocmask() (para que la acción por defecto para estas señales no tenga efecto si son comunicadas entre sucesivas llamadas a sigwaitinfo()o sigtimedwait()) y no establece manejadores para estas señales.

POSIX deja como indefinido el significado de un valor NULL para el argumento timeout de sigtimedwait() , permitiendo la posibilidad de que ésta tenga el mismo significado que una llamada a sigwaitinfo(), y, de hecho, así es lo que está establecido en Linux.

CONFORME A
POSIX 1003.1-2001

VÉASE TAMBIÉN
kill(2), sigaction(2), signal(2), sigpending(2), sigprocmask(2), sigqueue(2), signal(7), sigsetops(3)