# pthread_attr_setstack

## NAME



           pthread_attr_setstack, pthread_attr_getstack - set/get stack
           attributes in thread attributes object
    


## LIBRARY



           POSIX threads library (_libpthread_ , _-lpthread_)
    


## SYNOPSIS



           **#include <pthread.h>**
    
           **int pthread_attr_setstack(** size_t stacksize;
                                     **pthread_attr_t ***_attr_**,**
                                     **void** _stackaddr_**[**_stacksize_**],**
                                     **size_t** _stacksize_**);**
           **int pthread_attr_getstack(const pthread_attr_t *restrict** _attr_**,**
                                     **void **restrict** _stackaddr_**,**
                                     **size_t *restrict** _stacksize_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **pthread_attr_getstack**(), **pthread_attr_setstack**():
               _POSIX_C_SOURCE >= 200112L
    


## DESCRIPTION



           The **pthread_attr_setstack**() function sets the stack address and
           stack size attributes of the thread attributes object referred to
           by _attr_ to the values specified in _stackaddr_ and _stacksize_ ,
           respectively.  These attributes specify the location and size of
           the stack that should be used by a thread that is created using
           the thread attributes object _attr_.
    
           _stackaddr_ should point to the lowest addressable byte of a buffer
           of _stacksize_ bytes that was allocated by the caller.  The pages of
           the allocated buffer should be both readable and writable.
    
           The **pthread_attr_getstack**() function returns the stack address and
           stack size attributes of the thread attributes object referred to
           by _attr_ in the buffers pointed to by _stackaddr_ and _stacksize_ ,
           respectively.
    


## RETURN VALUE



           On success, these functions return 0; on error, they return a
           nonzero error number.
    


## ERRORS



           **pthread_attr_setstack**() can fail with the following error:
    
           **EINVAL** _stacksize_ is less than **PTHREAD_STACK_MIN**(16384) bytes.  On
                  some systems, this error may also occur if _stackaddr_ or
                  _stackaddr + stacksize_ is not suitably aligned.
    
           POSIX.1 also documents an **EACCES** error if the stack area described
           by _stackaddr_ and _stacksize_ is not both readable and writable by
           the caller.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **pthread_attr_setstack**(),             │ Thread safety │ MT-Safe │
           │ **pthread_attr_getstack**()              │               │         │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           POSIX.1-2008.
    


## NOTES



           These functions are provided for applications that must ensure
           that a thread's stack is placed in a particular location.  For
           most applications, this is not necessary, and the use of these
           functions should be avoided.  (Use pthread_attr_setstacksize(3) if
           an application simply requires a stack size other than the
           default.)
    
           When an application employs **pthread_attr_setstack**(), it takes over
           the responsibility of allocating the stack.  Any guard size value
           that was set using pthread_attr_setguardsize(3) is ignored.  If
           deemed necessary, it is the application's responsibility to
           allocate a guard area (one or more pages protected against reading
           and writing) to handle the possibility of stack overflow.
    
           The address specified in _stackaddr_ should be suitably aligned: for
           full portability, align it on a page boundary
           (_sysconf(_SC_PAGESIZE)_).  posix_memalign(3) may be useful for
           allocation.  Probably, _stacksize_ should also be a multiple of the
           system page size.
    
           If _attr_ is used to create multiple threads, then the caller must
           change the stack address attribute between calls to
           pthread_create(3); otherwise, the threads will attempt to use the
           same memory area for their stacks, and chaos will ensue.
    


## EXAMPLES



           See pthread_attr_init(3).
    


* * *