Loading

NOM

       pthread_attr_setguardsize,   pthread_attr_getguardsize   -  Définir  ou
       obtenir l’attribut de la taille de  garde  d’un  objet  d’attributs  de
       thread

SYNOPSIS

       #include <pthread.h>

       int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
       int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);

       Compilez et effectuez l’édition des liens avec l’option -pthread.

       La  fonction  pthread_attr_setguardsize() définit, à la valeur indiquée
       par guardsize, la taille de l’attribut contenant la taille de la  garde
       de l’objet d’attributs de thread attr.

       Si  guardsize est positif, alors, pour chaque thread créé avec attr, le
       système alloue une région supplémentaire d’au moins guardsize octets  à
       la  fin  de la pile du thread afin de servir de zone de protection pour
       la pile (voir la section BOGUES).

       Si guardsize est nul, les nouveaux threads créé avec attr n’auront  pas
       de zone de protection.

       La taille de garde par défaut est la taille d’une page système.

       Si  l’adresse  de  la  pile  a  été  définie  dans  attr  (en utilisant
       pthread_attr_setstack(3)  ou  pthread_attr_setstackaddr(3)),   ce   qui
       signifie  que  l’appelant  alloue  la  pile du thread, alors l’attribut
       contenant la taille de garde est ignoré (c’est-à-dire, aucune  zone  de
       garde  n’est  crée  par  le  système) :  il est de la responsabilité de
       l’application de prendre en charge les débordements de pile  (peut-être
       en   utilisant  mprotect(2)  pour  définir  manuellement  une  zone  de
       protection à la fin de la pile qui a été allouée).

       La fonction pthread_attr_getguardsize() renvoie, dans le tampon  pointé
       par  guardsize,  l’attribut  contenant  la  taille  de garde de l’objet
       d’attributs de thread auquel attr fait référence.

VALEUR RENVOYÉE

       En cas de réussite, ces fonctions renvoient 0 ; en cas  d’erreur  elles
       renvoient un numéro d’erreur non nul.

ERREURS

       POSIX.1-2001 documente une erreur EINVAL si attr ou guardsize n’est pas
       valable. Sous Linux,  ces  fonctions  réussissent  toujours  (mais  les
       applications  portables  et  à  l’épreuve  du temps devraient néanmoins
       prendre en charge une possible valeur de retour).

VERSIONS

       Ces fonctions sont fournies par la glibc depuis la version 2.1.

CONFORMITÉ

       POSIX.1-2001.

NOTES

       Une zone de garde consiste en des pages de mémoire virtuelles qui  sont
       protégées  pour  empêcher  des accès en lecture ou écriture. Si la pile
       d’un thread déborde dans la zone de garde, alors, pour la  plupart  des
       architectures  matérielles,  il  reçoit  un  signal  SIGSEGV, ce qui le
       prévient du débordement. Les zones  de  protection  démarrent  sur  des
       limites  de  pages,  et  la  taille de garde est arrondie en interne au
       multiple de taille de pages système supérieur lors de la création  d’un
       thread  (cependant,  pthread_attr_getguardsize()  renvoie  la taille de
       garde qui a été définie par pthread_attr_setguardsize()).

       Définir une taille de garde de 0 peut être utile pour économiser de  la
       mémoire  dans une application qui crée beaucoup de thread et sait qu’il
       n’y aura jamais de débordement de la pile.

       Choisir une taille de garde supérieure à la taille par défaut peut être
       nécessaire  pour  détecter  des débordement de pile si un thread alloue
       des structures de données importantes sur la pile.

BOGUES

       Au moment de la glibc 2.8, l’implémentation des thread  NPTL  place  la
       zone  de  protection  dans  la  taille  allouée  à  la pile, plutôt que
       d’allouer de l’espace supplémentaire à la fin de la pile,  comme  exigé
       par   POSIX.1   (ceci   peut   causer   une   erreur   EINVAL  lors  de
       pthread_create(3) si  la  taille  de  garde  est  trop  importante,  ne
       laissant en fait pas de place à la pile).

       L’implémentation  obsolète  LinuxThreads  faisait  ce qu’il fallait, en
       allouant de l’espace supplémentaire à la fin de la pile pour la zone de
       protection.

EXEMPLE

       Voir pthread_getattr_np(3).

VOIR AUSSI

       mmap(2),    mprotect(2),    pthread_attr_init(3),    pthread_create(3),
       pthread_attr_setstack(3), pthread_attr_setstacksize(3), pthreads(7)

COLOPHON

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

       Cette  page  de  manuel  a  été  traduite  et est maintenue par Nicolas
       François <nicolas.francois@centraliens.net> et l’équipe francophone  de
       traduction de Debian.

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