NOM
sigwaitinfo, sigtimedwait - Attente synchrone de signaux.
SYNOPSIS
#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);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
sigwaitinfo(), sigtimedwait() : _POSIX_C_SOURCE >= 199309L
sigwaitinfo() suspend l’exécution du thread appelant jusqu’à ce que
l’un des signaux de l’ensemble set soit reçu. (Si l’un des signaux de
l’ensemble set est déjà en attente pour le thread appelant,
sigwaitinfo() revient immédiatement avec les informations concernant le
signal).
sigwaitinfo() retire le signal de l’ensemble des signaux en attente, et
renvoie le numéro du signal comme valeur de retour. Si l’argument info
n’est pas NULL, alors il sera rempli avec une structure du type
siginfo_t (voir sigaction(2)) contenant les informations concernant le
signal.
Les signaux reçus via sigwaitinfo() sont délivrés dans l’ordre
habituel, voir signal(7) pour plus de détails.
sigtimedwait() opère exactement comme sigwaitinfo() mais elle a un
argument supplémentaire, timeout, qui permet de fixer une limite
maximale au temps pendant lequel le thread est suspendu. Cet argument
est du type :
struct timespec {
long tv_sec; /* secondes */
long tv_nsec; /* nanosecondes */
}
Si les deux champs de cette structure sont nuls, sigtimedwait() revient
tout de suite, soit avec des informations sur un signal déjà en
attente, soit avec une erreur si aucun signaux de l’ensemble set
n’étaient disponibles.
VALEUR RENVOYÉE
S’ils réussissent sigwaitinfo() et sigtimedwait() renvoient un numéro
de signal (une valeur supérieure à zéro). S’ils échouent, ils renvoient
-1, et errno contient le code d’erreur.
ERREURS
EAGAIN Aucun signal de l’ensemble set n’a été reçu avant expiration du
délai timeout indiqué pour sigtimedwait().
EINTR L’appel a été interrompu par un gestionnaire de signal ; voir
signal(7). (Un signal autre que ceux présents dans l’ensemble
set.)
EINVAL timeout était invalide.
CONFORMITÉ
POSIX.1-2001.
NOTES
En utilisation habituelle, l’appelant bloque les signaux de l’ensemble
set au préalable avec un appel sigprocmask(2) (afin que la délivrance
des signaux ne se produise pas en dehors de l’appel sigwaitinfo() ou
sigtimedwait()) et n’installe pas de gestionnaire pour ces signaux.
Dans un programme multithreadé, le signal doit être bloqué dans tous
les threads pour empêcher que le signal ne soit délivré à un autre
thread que celui exécutant sigwaitinfo() ou sigtimedwait().
L’ensemble des signaux qui sont en attente pour une thread donné est
l’union de l’ensemble des signaux spécifiquement en attente pour ce
thread et de l’ensemble des signaux en attente pour le processus
lui-même (voir signal(7)).
Si plusieurs threads d’un processus sont bloqués dans sigwaitinfo() or
sigtimedwait() en attente du ou des mêmes signaux, un seul des threads
recevra réellement le signal s’il est fourni au processus (dans son
ensemble) ; on ne peut pas savoir quel thread recevra le signal.
POSIX ne spécifie pas le comportement si une valeur NULL est indiquée
pour l’argument timeout de sigtimedwait(), permettant par exemple
d’avoir le même comportement que celui de sigwaitinfo(), ce qui est le
cas sous Linux.
Sous Linux, sigwaitinfo() est une fonction de bibliothèque implémentée
au dessus de sigtimedwait().
VOIR AUSSI
kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2),
sigprocmask(2), sigqueue(2), sigsetops(3), sigwait(3), signal(7),
time(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».