Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Fonction sigsetjmp (POSIX)

La fonction siglongjmp La macro __STDC_VERSION_SETJMP_H__


Entête à inclure

#include <setjmp.h>  // <csetjmp> en C++

Fonction sigsetjmp (POSIX)

int sigsetjmp( sigjmp_buf env, int saveSignals );

La fonction sigsetjmp est la variante POSIX de setjmp. Elle sauvegarde un point de reprise dans un objet sigjmp_buf. Si saveSignals est non nul, elle sauvegarde aussi le masque des signaux bloqués afin que siglongjmp puisse le restaurer.

POSIX indique que cette interface peut être fournie comme fonction, comme macro, ou les deux. Il faut donc l'utiliser comme une interface de bibliothèque, sans chercher à prendre des hypothèses sur son implémentation.

Paramètres

Valeur de retour

La fonction retourne 0 lors de son appel direct. Après un retour provoqué par siglongjmp, elle retourne la valeur transmise à siglongjmp, ou 1 si cette valeur était 0.

Exemple de code

L'exemple suivant illustre l'utilisation de sigsetjmp avec sauvegarde du masque des signaux.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
#define _POSIX_C_SOURCE 200809L

#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static sigjmp_buf recoveryPoint;

static void handleSignal( int signalNumber ) {
    siglongjmp( recoveryPoint, signalNumber );
}

int main() {

    signal( SIGINT, handleSignal );

    int code = sigsetjmp( recoveryPoint, 1 );

    if ( code == 0 ) {
        puts( "Déclenchement du signal SIGINT." );
        raise( SIGINT );
    } else {
        printf( "Signal %d intercepté.\n", code );
    }

    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction sigsetjmp

Le résultat produit est le suivant.

Déclenchement du signal SIGINT.
Signal 2 intercepté.

Sujets connexes

<setjmp.h>
setjmp
sigjmp_buf
siglongjmp


La fonction siglongjmp La macro __STDC_VERSION_SETJMP_H__




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé