Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       pthread_attr_setstack,  pthread_attr_getstack  -  изменяет/возвращает  атрибуты  стека  из
       объекта атрибутов нити

LIBRARY

       POSIX threads library (libpthread, -lpthread)

СИНТАКСИС

       #include <pthread.h>

       int pthread_attr_setstack(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);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       pthread_attr_getstack(), pthread_attr_setstack():
           _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

       Функция pthread_attr_setstack()  изменяет  атрибуты  адреса  и  размера  стека  в  объекте
       атрибутов  нити,  на  который  указывает  attr,  на  значения,  задаваемые  в  stackaddr и
       stacksize, соответственно. Данными атрибутами задаёт расположение и размер стека,  который
       будет использоваться нитью, создаваемой с использованием объекта атрибутов нити attr.

       Значение  stackaddr  должно указывать на самый младший адресуемый байт буфера из stacksize
       байт, выделенного вызывающим. Страницы выделенного буфера должны быть доступны на чтение и
       запись.

       Функция  pthread_attr_getstack()  возвращает  атрибуты  адреса и размера стека  из объекта
       атрибутов нити, на который указывает attr, в  буфер,  на  который  указывает  stackaddr  и
       stacksize, соответственно.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При  успешном выполнении эти функции возвращают 0; при ошибке возвращается ненулевой номер
       ошибки.

ОШИБКИ

       Функция pthread_attr_setstack() может завершиться со следующей ошибкой:

       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 также описана ошибка EACCES, которая возникает, если область стека, определённая
       stackaddr и stacksize, недоступна вызывающему на чтение и запись.

ВЕРСИИ

       These functions are provided since glibc 2.2.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │pthread_attr_setstack(), pthread_attr_getstack()       │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

       Эти функции нужны приложениям, в которых нужно размещать  стек  в  определённом  месте.  В
       большинстве  приложений  это  не  нужно  и  эти функции использовать не стоит (используйте
       pthread_attr_setstacksize(3), если приложению нужно задать только размер  стека,  отличный
       от умолчательного).

       Когда приложение использует pthread_attr_setstack(), оно самостоятельно выделяет место под
       стек. Защитный размер, задаваемый  pthread_attr_setguardsize(3),  игнорируется.  Если  его
       учитывать  необходимо, то приложение должно самостоятельно выделять защитную область (одну
       или  несколько  страниц,  защищённых  от  чтения  и  записи)  для   обработки   возможного
       переполнения стека.

       Адрес,  указанный  в  stackaddr,  должен быть выровнен соответствующим образом: для полной
       переносимости выравнивайте его по границе страницы (sysconf(_SC_PAGESIZE)). Для  выделения
       полезно  использовать функцию posix_memalign(3). Вероятно, значение stacksize также должно
       быть кратно размеру системной страницы.

       Если attr используется при  создании  нескольких  нитей,  то  вызывающий  должен  изменять
       атрибут  адреса  стека  между  вызовами  pthread_create(3);  в противном случае нити будут
       пытаться использовать одну и ту же область памяти для стека и возникнет хаос.

ПРИМЕРЫ

       Смотрите pthread_attr_init(3).

СМ. ТАКЖЕ

       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)

ПЕРЕВОД

       Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov
       <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Kogan, Max Is
       <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.