PTHREAD_ATTR_SETSTACK(3)

NOM
pthread_attr_setstack, pthread_attr_getstack - Définir ou obtenir les attributs de pile d'un objet d'attributs de thread

SYNOPSIS
#include <pthread.h>
int pthread_attr_setstack(pthread_attr_t *attr,
                          void *stackaddr, size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *attr,
                          void **stackaddr, size_t *stacksize);

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

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

pthread_attr_getstack(), pthread_attr_setstack() :
    _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

DESCRIPTION
La fonction pthread_attr_setstack() définit l'adresse et la taille de la pile dans l'objet d'attributs de thread auquel attr fait référence, à partir des valeurs indiquées par stackaddr et stacksize respectivement. Ces attributs indique l'emplacement et la taille de la pile qui doit être utilisée par un thread qui est créé en utilisant attr. stackaddr devrait pointer vers l'octet adressable d'adresse la plus basse d'un tampon de stacksize octets, alloué par l'appelant. Les pages du tampon alloué devraient être accessibles en lecture et écriture. La fonction pthread_attr_getstack() renvoie, respectivement dans les tampons pointé par stackaddr et stacksize, l'adresse et la taille de la pile d'un 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
pthread_attr_setstack() peut échouer avec les erreurs suivantes :

EINVAL
    stacksize est inférieur à PTHREAD_STACK_MIN (16384) octets. Sur certains systèmes, cette erreur peut également se produire si stackaddr ou stackaddr + stacksize n'est pas aligné correctement.

POSIX.1-2001 documente également une erreur EACCES si la zone de pile décrite par stackaddr et stacksize n'est pas accessible en lecture ou écriture par l'appelant.

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

ATTRIBUTS

  Multithreading (voir pthreads(7))
Les fonctions pthread_attr_setstack() et pthread_attr_getstack() sont sûres dans un contexte multithread.

CONFORMITÉ
POSIX.1-2001.

NOTES
Ces fonctions sont fournies pour les applications qui doivent assurer que la pile d'un thread se trouve à un emplacement particulier. Pour la plupart des applications, ce n'est pas nécessaire, et l'utilisation de cette fonction devrait être évitée. (Utilisez pthread_attr_setstacksize(3) si une application a juste besoin d'une pile de taille différente de la taille par défaut.) Quand une application utilise pthread_attr_setstack(), elle prend la responsabilité d'allouer la pile. Si une taille de garde a été définie en utilisant pthread_attr_setguardsize(3), elle est ignorée. Si c'est nécessaire, l'application est responsable de l'allocation d'une zone de protection (une page ou plus protégées en lecture et écriture) pour prendre en charge la possibilité d'un débordement de pile. L'adresse indiquée par stackaddr devrait être alignée correctement : pour une compatibilité complète, il faut l'aligner sur une limite de page (sysconf(_SC_PAGESIZE)). posix_memalign(3) peut être utile pour l'allocation. stacksize devrait probablement aussi être un multiple de la taille des pages système. Si attr est utilisé pour créer plusieurs threads, alors l'appelant doit changer l'attribut de l'adresse de la pile entre les appels à pthread_create(3) ; sinon, les threads vont chercher à utiliser la même zone mémoire pour leurs piles, ce qui ne pourra que créer du chaos.

EXEMPLE
Consultez pthread_attr_init(3).

VOIR AUSSI
mmap(2), mprotect(2), posix_memalign(3), pthread_attr_init(3), pthread_attr_setguardsize(3), pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)

COLOPHON
Cette page fait partie de la publication 3.70 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/>.

Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».