longjmp(3) Saut non local vers un contexte de pile sauvegardé

Other Alias

siglongjmp

SYNOPSIS

#include <setjmp.h>
void longjmp(jmp_buf env, int val);
void siglongjmp(sigjmp_buf env, int val);

Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

siglongjmp() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_C_SOURCE

DESCRIPTION

longjmp() et setjmp(3) sont utiles pour la gestion d'erreurs et d'interruptions rencontrées dans une routine bas-niveau d'un programme. longjmp() restitue l'environnement sauvegardé lors du dernier appel de setjmp(3) avec l'argument env correspondant. Après l'appel longjmp(), l'exécution du programme continue comme si l'appel correspondant de setjmp(3) venait juste de renvoyer val. longjmp() ne peut pas renvoyer 0. Si longjmp est appelé avec 0 en tant que second argument, setjmp(3) renverra 1 à la place.

siglongjmp() est identique à longjmp() excepté pour le type de son argument env. Si et seulement si l'appel sigsetjmp(3) définit cet env, utilisé comme drapeau savesigs non nul, alors siglongjmp() restituera également le signal masqué qui a été sauvé par sigsetjmp(3).

VALEUR RENVOYÉE

Ces fonctions ne reviennent jamais.

CONFORMITÉ

C89, C99 et POSIX.1-2001 spécifient longjmp(). POSIX.1-2001 spécifie siglongjmp().

NOTES

POSIX ne précise pas si longjmp() restaurera le contexte du signal (consultez setjmp(3) pour plus de détails). Si vous voulez sauver et restaurer le masque de signaux de façon portable, utilisez sigsetjmp(3) et siglongjmp().

Les valeurs des variables automatiques ne sont pas spécifiées après un appel à longjmp() si elles suivent tous les critères suivants :

  • elles sont locales à la fonction qui effectue l'appel correspondant setjmp(3) ;
  • leur valeur est changée entre les appels setjmp(3) et longjmp() ;
  • elles ne sont pas déclarées comme volatile.

Ces remarques s'appliquent aussi à siglongjmp().

longjmp() et siglongjmp() rendent les programmes difficiles à comprendre et à maintenir. Il est préférable si possible d'utiliser une autre méthode.

COLOPHON

Cette page fait partie de la publication 3.65 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

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <[email protected]> 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> ».