pthread_attr_setguardsize()

Установить размер области защиты стека потока

Прототип:

#include <pthread.h>
int pthread_attr_setguardsize( pthread_attr_t *attr,
size_t guardsize );

Аргументы:

attr
Указатель на структуру pthread_attr_t, определяющую атрибуты создаваемого потока. Подробнее см. pthread_attr_init().
guardsize
Новое значение размера области защиты стека потока.

Библиотека:

libc

Описание:

Функция pthread_attr_setguardsize() устанавливает размер области защиты стека потока guardsize через атрибуты создаваемого потока attr.

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

Атрибут guardsize контролирует размер защитной страницы стека потока, которая помогает защитить стек от случайного переполнения. При этом размер стека будет иметь избыточный размер, равный guardsize байт. Если переполнение стека настолько велико, что переполняет и защитную область стека, то резко повышается вероятность поступления в поток сигнала SIGSEGV.

Данный атрибут предоставляется по следующим причинам:

Возвращаемое значение:

EOK
Успешное завершение.
EINVAL
Объект attr или guardsize не являются корректными.

Классификация:

POSIX 1003.1 XSI

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Если разработчик создает стек самостоятельно (используя атрибут stackaddr объекта attr; см. pthread_attr_setstackaddr()), то атрибут guardsize игнорируется. При этом, однако, защита стека не используется.

Если менеджер памяти находится в режиме работы с физической памятью, атрибут guardsize также игнорируется.

Тематические ссылки:

pthread_attr_getguardsize(), pthread_attr_init(), pthread_attr_setstackaddr(). sysconf()




Предыдущий раздел: Описание API системной библиотеки