Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       sigaltstack - Consultez ou définir la pile de signal

SYNOPSIS

       #include <signal.h>

       int sigaltstack(const stack_t *ss, stack_t *oss);

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

       sigaltstack() :
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Depuis la glibc 2.12 : */ _POSIX_C_SOURCE >= 200809L

DESCRIPTION

       sigaltstack()  permet  à  un  processus de définir une nouvelle pile spécifique pour les gestionnaires de
       signaux et/ou de récupérer l'état d'une pile spécifique de signal déjà existante. Une pile spécifique  de
       signal est utilisée durant l'exécution d'un gestionnaire de signal si la mise en place de ce gestionnaire
       (consultez sigaction(2)) le spécifiait.

       La séquence d'actions nominale pour utiliser une pile spécifique de signal est la suivante :

       1. Allouer une zone mémoire qui sera utilisée comme pile spécifique de signal.

       2. Utiliser  sigaltstack()  afin  d'informer  le  système  de  l'existence  et  de la position de la pile
          spécifique de signal.

       3. Lors de la mise en place du gestionnaire de signal en utilisant sigaction(2), informer le système  que
          ce  gestionnaire  de  signal  doit  être  exécuté  sur la pile spécifique de signal en positionnant le
          drapeau SA_ONSTACK.

       L'argument ss est utilisé afin de définir une nouvelle pile spécifique de signal, tandis  que  l'argument
       oss  est  utilisé  afin de récupérer des informations sur la pile de signal actuellement en place. Si une
       seule de ces actions vous intéresse, alors l'autre argument peut être positionné à NULL.  Chacun  de  ces
       paramètres est une structure du type suivant :

           typedef struct {
               void  *ss_sp;     /* Adresse de base de la pile*/
               int    ss_flags;  /* drapeaux */
               size_t ss_size;   /* Nombre d'octets dans la pile */
           } stack_t;

       Afin  de  mettre  en  place une nouvelle pile spécifique de signal, ss.ss_flags est positionné à zéro, et
       ss.ss_sp et ss.ss_size spécifient l'adresse de début et la taille de la pile. La constante  SIGSTKSZ  est
       définie  de  façon  à  être suffisamment grande pour couvrir les besoins typiques en espace mémoire d'une
       pile spécifique de signal, et la constante MINSIGSTKSZ définit la taille minimum nécessaire à l'exécution
       d'un gestionnaire de signal.

       Lorsqu'un gestionnaire de signal est invoqué sur la pile  spécifique,  le  noyau  aligne  automatiquement
       l'adresse donnée dans ss.ss_sp sur une valeur correcte pour l'architecture matérielle utilisée.

       Afin  de  désactiver  une  pile  existante, positionnez ss.ss_flags à SS_DISABLE. Dans ce cas, les autres
       champs de ss sont ignorés.

       Si oss ne vaut pas NULL, alors il est utilisé afin de renvoyer des informations sur la pile spécifique de
       signal qui était utilisée avant l'appel à sigaltstack(). Les champs oss.ss_sp  et  oss.ss_size  renvoient
       l'adresse  de  départ  et  la taille de cette pile. Le champ oss.ss_flags peut renvoyer l'une des valeurs
       suivantes :

       SS_ONSTACK
              Le processus s'exécute actuellement sur la pile spécifique de signal. (Remarquez qu'il  n'est  pas
              possible  de  changer  la pile spécifique de signal si le processus est en train de s'exécuter sur
              cette dernière.)

       SS_DISABLE
              La pile spécifique de signal est actuellement désactivée.

VALEUR RENVOYÉE

       sigaltstack() renvoie 0 en cas de succès, ou -1 en cas d'échec en positionnant alors errno pour  préciser
       l'erreur.

ERREURS

       EFAULT L'un des paramètres ss ou oss ne vaut pas NULL et pointe vers une zone mémoire n'appartenant pas à
              l'espace d'adressage du processus.

       EINVAL ss ne vaut pas NULL et le champ ss_flags contient une valeur non nulle différente de SS_DISABLE.

       ENOMEM La  taille  de  la  nouvelle  pile  spécifique  de  signal  indiquée (ss.ss_size) est inférieure à
              MINSTKSZ.

       EPERM  On  a  essayé  de  modifier  la  pile  spécifique  de  signal  alors  que  celle-ci  était  active
              (c'est-à-dire,  le  processus  était  déjà en train de s'exécuter sur la pile spécifique de signal
              courante).

CONFORMITÉ

       SUSv2, SVr4, POSIX.1-2001.

NOTES

       Le cas le plus courant d'utilisation d'une pile spécifique est pour la gestion du signal SIGSEGV qui  est
       généré si la place disponible pour la pile normale du processus est épuisée. Dans ce cas, un gestionnaire
       pour  SIGSEGV ne peut pas être exécuté sur la pile du processus ; si l'on souhaite l'intercepter, on doit
       utiliser une pile spécifique.

       La mise en place d'une pile  spécifique  de  signal  est  utile  si  un  processus  soupçonne  qu'il  est
       susceptible  d'épuiser  sa  pile standard. Cela peut se produire, par exemple, lorsque la pile grossit au
       point de rencontrer la limite supérieure du tas, ou si elle atteint une limite établie  par  un  appel  à
       setrlimit(RLIMIT_STACK,  &rlim).  Si la pile standard est épuisée, le noyau envoie au processus un signal
       SIGSEGV. Dans ces circonstances,  la  seule  façon  d'intercepter  ce  signal  est  d'utiliser  une  pile
       spécifique de signal.

       Sur  la  plupart  des  architectures  supportées  par  Linux,  les  piles  s'étendent  vers  les adresses
       décroissantes. sigaltstack() prend automatiquement en charge le sens d'expansion de la pile.

       Les fonctions appelées depuis un gestionnaire de signal s'exécutant sur une  pile  spécifique  de  signal
       utilisent  également  cette  pile.  (Cela  s'applique  également  à  tous les gestionnaires invoqués pour
       d'autres signaux alors que le processus s'exécute sur la pile spécifique de signal.) Contrairement  à  la
       pile  standard, le système n'accroît pas automatiquement la pile spécifique de signal. Dépasser la taille
       allouée pour la pile spécifique de signal conduit à des résultats imprévisibles.

       Un appel execve(2) réussi détruit toutes piles spécifiques de signal existantes. Un processus  fils  créé
       avec fork(2) hérite d'une copie des paramètres de la pile spécifique de signal de son père.

       sigaltstack() succède à l'ancien appel sigstack(). Pour des raisons de compatibilité, la glibc implémente
       sigstack(). Toutes les nouvelles applications devraient être écrites en utilisant sigaltstack().

   Historique
       BSD 4.2 possédait un appel système sigstack(). Il utilisait une structure légèrement différente, et avait
       comme désavantage principal la nécessité pour l'appelant de connaître le sens d'expansion de la pile.

EXEMPLE

       Le segment de code suivant donne un exemple d'utilisation de sigaltstack() :

           stack_t ss;

           ss.ss_sp = malloc(SIGSTKSZ);
           if (ss.ss_sp == NULL)
               /* Traitement de l'erreur */;
           ss.ss_size = SIGSTKSZ;
           ss.ss_flags = 0;
           if (sigaltstack(&ss, NULL) == -1)
               /* Traitement de l'erreur */;

VOIR AUSSI

       execve(2), setrlimit(2), sigaction(2), siglongjmp(3), sigsetjmp(3), signal(7)

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/>.

       Stéphan Rafin (2002),  Alain  Portal  <http://manpagesfr.free.fr/> (2006).  Julien  Cristau  et  l'équipe
       francophone de traduction de Debian (2006-2009).

       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> ».

Linux                                           26 septembre 2010                                 SIGALTSTACK(2)