Fonctions système Linux de gestion des signaux

Complément de cours

Types

sigset_t
struct sigaction
Fonctions
sigaction()
sigprocmask()

Autres fonctions

sigblock()
sigvec()
sigsetmask()


sigaction()

Nom
sigaction – spécifie le traitement effectué ou à effectuer à réception d'un signal donné.
Syntaxe
 
#include <csignal>   // permet d'atteindre le prototype de sigaction() et de struct sigaction

int sigaction (int signum, const struct sigaction * act,
                                 struct sigaction * o_act);

Description

    La fonction sigaction() permet d'installer un nouveau traitant de signal, de consulter sa valeur actuelle, et/ou d'indiquer au système quels signaux devront être masqués pendant l'exécution du traitant. Les trois paramètres ont la signification suivante :

     La véritable définition de la structure sigaction, accessible à partir du fichier <csignal>, est assez complexe. Une déclaration simplifiée pourrait être la suivante :
 
struct sigaction
{
    void    (*sa_handler) (int);
    sigset_t sa_mask;
    int      sa_flags;

}; // sigaction

    Les champs de la structure sigaction ont les significations suivantes :

Remarque : sigaction() peut être appliquée à n'importe quel signal à l'exception de SIGKILL et SIGSTOP.

Valeur retournée

    La fonction sigaction() renvoie 0 si l'appel s'est bien déroulé.

Diagnostic d'erreur

    La fonction sigaction() renvoie -1 en cas d'erreur et positionne la variable globale errno.
 


sigprocmask()

Nom
sigprocmask – permet de positionner ou consulter le masque des signaux bloqués.
Syntaxe
 
#include <csignal>[1] // permet d'atteindre le prototype de sigprocmask()
                     //   et la déclaration de sigset_t

int sigprocmask (int how, const sigset_t * set,
                                sigset_t * oldset);

Description

    La fonction sigprocmask() permet de positionner ou consulter le masque des signaux bloqués. Les trois paramètres ont la signification suivante :

Valeur retournée

    La fonction sigprocmask() renvoie 0 si l'appel s'est bien déroulé.

Diagnostic d'erreur

    La fonction sigprocmask() renvoie -1 en cas d'erreur et positionne la variable globale errno.


Autres fonctions

    Il existe d'autres fonctions, système ou pas, permettant d'effectuer des opérations sur les signaux. Elles ne sont présentes en général que pour assurer la compatibilité avec d'autres systèmes Unix ou avec des versions antérieures, mais ne présentent pas d'intérêt particulier.

Fonctions système
 
sigblock() ajoute certains signaux aux signaux déjà bloqués. Peut être remplacée par sigaction().
sigvec() peut être remplacée par sigaction() avec laquelle elle a beaucoup de ressemblances
sigsetmask() peut être remplacé par sigprocmask().

Fonctions C de niveau 3
 
signal() déroute un signal donné sous un traitant de signal donné, en renvoyant un pointeur vers l'ancien traitant. Peut être remplacée par sigaction()

    De nombreuses fonctions ou macros sont disponibles dans les différents systèmes, qui permettent les manipulations des masques de signaux : sigaddset(), sigdelset(), sigemptyset(), sigfillset(), sigismember().

Type sigset_t

    Conformément à la norme POSIX, les masques ne sont pas de type int mais de type sigset_t défini dans le fichier /usr/include/asm/signal.h par l'une des définitions suivantes :
 
typedef unsigned long sigset_t;

ou
 
typedef struct {
    unsigned long sig[_NSIG_WORDS];
} sigset_t;



[1]   <signal.h> en C standard