Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 30 стр.

UptoLike

Составители: 

30
Использование отдельного стека сигнала
Стек сигналаэто специальный участок памяти, используемый как стек во
время вызова обработчика сигнала. Размер стека должен быть достаточно большим для
того, чтобы обезопаситься от переполнения. Стандартный размер стека сигнала для
Linux задается макросом SIGSTKSZ. Для выделения пространства может
использоваться функция malloc. Для описания стека используется следующая структура
sigaltstack. Она включает следующие поля:
void *ss_sp указатель на область данных стека;
size_t ss_size размер в байтах стека, на который указывает ss_sp. В Linux
определены два макроса, которые могут использоваться для
установки размера стека:
SIGSTKSZ стандартное значение для стека сигнала,
достаточное для большинства операций;
MINSIGSTKSZ минимальное значение размера,
необходимое операционной системе для вызова
обработчика.
int ss_flags поле может содержать битовую маску
следующих значений:
SS_DISABLE система не должна использовать стек
сигнала;
SS_ONSTACK устанавливается системой и
показывает, что в настоящий момент используется.
int sigaltstack(const struct sigaltstack *STACK,
const struct sigaltstack *OLDSTACK)
Функция указывает операционной системе на необходимость использования
альтернативного стека. Если OLDSTACK не является нулевым указателем, в этом
аргумент заносится информация о текущем стеке. Возвращает значение 0, если функция
выполнена успешно, -1 – в случае ошибки. В случае ошибки переменная errno может
принимать следующие значения:
EINVAL была попытка отключит стек, который в настоящее время используется;
ENOMEM размер альтернативного стека недостаточен для работы.
          Использование отдельного стека сигнала
          Стек сигнала – это специальный участок памяти, используемый как стек во
время вызова обработчика сигнала. Размер стека должен быть достаточно большим для
того, чтобы обезопаситься от переполнения. Стандартный размер стека сигнала для
Linux задается макросом SIGSTKSZ. Для выделения пространства может
использоваться функция malloc. Для описания стека используется следующая структура
sigaltstack. Она включает следующие поля:
void *ss_sp     указатель на область данных стека;
size_t ss_size размер в байтах стека, на который указывает ss_sp. В Linux
                определены два макроса, которые могут использоваться для
                установки размера стека:
                           SIGSTKSZ – стандартное значение для стека сигнала,
                           достаточное для большинства операций;
                           MINSIGSTKSZ – минимальное значение размера,
                           необходимое операционной системе для вызова
                           обработчика.
int ss_flags                       поле может содержать битовую маску
                           следующих значений:
                           SS_DISABLE – система не должна использовать стек
                           сигнала;
                           SS_ONSTACK – устанавливается системой и
                           показывает, что в настоящий момент используется.
       int sigaltstack(const struct sigaltstack *STACK,
            const struct sigaltstack *OLDSTACK)
        Функция указывает операционной системе на необходимость использования
альтернативного стека. Если OLDSTACK не является нулевым указателем, в этом
аргумент заносится информация о текущем стеке. Возвращает значение 0, если функция
выполнена успешно, -1 – в случае ошибки. В случае ошибки переменная errno может
принимать следующие значения:
EINVAL         была попытка отключит стек, который в настоящее время используется;
ENOMEM         размер альтернативного стека недостаточен для работы.




       30