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.
POSIX 1003.1-2001
VÉASE TAMBIÉN¶
kill(2),
sigaction(2),
signal(2),
sigpending(2),
sigprocmask(2),
sigqueue(2),
signal(7),
sigsetops(3)