#include <setjmp.h> // <csetjmp> en C++
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.
sigjmp_buf dans lequel sauvegarder l'environnement courant.
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.
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; } |
Le résultat produit est le suivant.
Déclenchement du signal SIGINT. Signal 2 intercepté.
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 :