Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       sigaltstack - Consultez ou fixer la pile de signal

SYNOPSIS

       #include <signal.h>

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

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

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

DESCRIPTION

       sigaltstack()  permet  a  un  processus  de  definir  une nouvelle pile
       specifique pour les gestionnaires de signaux et/ou de recuperer  l'etat
       d'une  pile specifique de signal deja existante. Une pile specifique de
       signal est utilisee durant l'execution d'un gestionnaire de  signal  si
       la  mise  en  place  de  ce  gestionnaire  (consultez  sigaction(2)) le
       specifiait.

       La sequence d'actions nominale pour utiliser  une  pile  specifique  de
       signal est la suivante :

       1. Allouer  une zone memoire qui sera utilisee comme pile specifique de
          signal.

       2. Utiliser sigaltstack() afin d'informer le systeme de l'existence  et
          de la position de la pile specifique de signal.

       3. Lors  de  la  mise  en  place du gestionnaire de signal en utilisant
          sigaction(2), informer le systeme que ce gestionnaire de signal doit
          etre  execute  sur  la  pile specifique de signal en positionnant le
          drapeau SA_ONSTACK.

       L'argument ss est utilise afin de definir une nouvelle pile  specifique
       de  signal, tandis que l'argument oss est utilise afin de recuperer des
       informations sur la pile de signal actuellement en place. Si une  seule
       de  ces  actions  vous  interesse,  alors  l'autre  argument  peut etre
       positionne a NULL. Chacun de ces parametres 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  specifique de signal,
       ss.ss_flags est positionne a zero, et ss.ss_sp et ss.ss_size specifient
       l'adresse  de  debut et la taille de la pile. La constante SIGSTKSZ est
       definie de facon a etre suffisamment grande pour  couvrir  les  besoins
       typiques  en  espace  memoire  d'une  pile  specifique de signal, et la
       constante  MINSIGSTKSZ  definit  la   taille   minimum   necessaire   a
       l'execution d'un gestionnaire de signal.

       Lorsqu'un gestionnaire de signal est invoque sur la pile specifique, le
       noyau aligne automatiquement l'adresse donnee  dans  ss.ss_sp  sur  une
       valeur correcte pour l'architecture materielle utilisee.

       Afin  de  desactiver  une  pile  existante,  positionnez  ss.ss_flags a
       SS_DISABLE. Dans ce cas, les autres champs de ss sont ignores.

       Si oss ne vaut pas NULL, alors il est  utilise  afin  de  renvoyer  des
       informations  sur la pile specifique de signal qui etait utilisee avant
       l'appel a sigaltstack(). Les champs oss.ss_sp et oss.ss_size  renvoient
       l'adresse  de  depart et la taille de cette pile. Le champ oss.ss_flags
       peut renvoyer l'une des valeurs suivantes :

       SS_ONSTACK
              Le processus s'execute actuellement sur la  pile  specifique  de
              signal.  (Remarquez  qu'il n'est pas possible de changer la pile
              specifique de signal si le processus est en train de  s'executer
              sur cette derniere.)

       SS_DISABLE
              La pile specifique de signal est actuellement desactivee.

VALEUR RENVOY'EE

       sigaltstack()  renvoie  0  en  cas  de  succes, ou -1 en cas d'echec en
       positionnant alors errno pour preciser l'erreur.

ERREURS

       EFAULT L'un des parametres ss ou oss ne vaut pas NULL  et  pointe  vers
              une  zone  memoire  n'appartenant  pas a l'espace d'adressage du
              processus.

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

       ENOMEM La  taille  de  la  nouvelle  pile specifique de signal indiquee
              (ss.ss_size) est inferieure a MINSTKSZ.

       EPERM  On a essaye de modifier la pile specifique de signal  alors  que
              celle-ci  etait active (c'est-a-dire, le processus etait deja en
              train de s'executer sur la pile specifique de signal courante).

CONFORMIT'E

       SUSv2, SVr4, POSIX.1-2001.

NOTES

       Le cas le plus courant d'utilisation d'une pile specifique est pour  la
       gestion du signal SIGSEGV qui est genere si la place disponible pour la
       pile normale du processus est epuisee. Dans  ce  cas,  un  gestionnaire
       pour  SIGSEGV  ne  peut  pas etre execute sur la pile du processus ; si
       l'on souhaite l'intercepter, on doit utiliser une pile specifique.

       La mise en place d'une pile  specifique  de  signal  est  utile  si  un
       processus  soupconne  qu'il est susceptible d'epuiser sa pile standard.
       Cela peut se produire, par exemple, lorsque la pile grossit au point de
       rencontrer  la  limite superieure du tas, ou si elle atteint une limite
       etablie par un appel  a  setrlimit(RLIMIT_STACK,  &rlim).  Si  la  pile
       standard  est  epuisee, le noyau envoie au processus un signal SIGSEGV.
       Dans ces circonstances, la seule  facon  d'intercepter  ce  signal  est
       d'utiliser une pile specifique de signal.

       Sur  la  plupart  des  architectures  supportees  par  Linux, les piles
       s'etendent  vers  les  adresses  decroissantes.   sigaltstack()   prend
       automatiquement en charge le sens d'expansion de la pile.

       Les fonctions appelees depuis un gestionnaire de signal s'executant sur
       une pile specifique de signal utilisent  egalement  cette  pile.  (Cela
       s'applique  egalement  a  tous les gestionnaires invoques pour d'autres
       signaux alors que le processus s'execute  sur  la  pile  specifique  de
       signal.)  Contrairement  a  la  pile standard, le systeme n'accroit pas
       automatiquement la  pile  specifique  de  signal.  Depasser  la  taille
       allouee  pour  la  pile  specifique  de  signal conduit a des resultats
       imprevisibles.

       Un appel execve(2) reussi detruit toutes piles  specifiques  de  signal
       existantes.  Un  processus fils cree avec fork() herite d'une copie des
       parametres de la pile specifique de signal de son pere.

       sigaltstack() succede a l'ancien appel sigstack(). Pour des raisons  de
       compatibilite,  la  glibc  implemente  sigstack(). Toutes les nouvelles
       applications devraient etre ecrites en utilisant sigaltstack().

   Historique
       BSD 4.2  possedait  un  appel  systeme  sigstack().  Il  utilisait  une
       structure  legerement  differente, et avait comme desavantage principal
       la necessite pour l'appelant de connaitre 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.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.