SETJMP(3)

НАЗВАНИЕ
setjmp, sigsetjmp - сохранение контекста стека при нелокальном переходе

СИНТАКСИС
#include <setjmp.h>

int setjmp(jmp_buf env);
int sigsetjmp(sigjmp_buf env, int savesigs);

ОПИСАНИЕ
Функции setjmp() и longjmp() используются для работы с ошибками и прерываниями, встречающимися в подпрограммах низкого уровня. setjmp() сохраняет стек контекста/окружения в env для дальнейшего его использования функцией longjmp(). Стек контекста будет обнулен, если функция, вызвавшая setjmp(), завершит работу.

Функция sigsetjmp() идентична setjmp(). Если savesigs не равно нулю, то набор заблокированных сигналов сохраняется в env и будет восстановлен, если в дальнейшем siglongjmp() будет работать с указанным env.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
setjmp() и sigsetjmp() возвращают 0 при непосредственном выходе и ненулевое значение при выходе из longjmp() с использованием сохраненного контекста.

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX, ISO 9899 (C99)

ЗАМЕЧАНИЯ
POSIX не уточняет, должна ли setjmp сохранять контекст сигнала. В SYSV - не должна. В BSD4.3 такое сохранение обязательно, хотя в данной ОС есть функция _setjmp, которая контекст не сохраняет. Если Вам необходимо сохранить маски сигналов, используйте sigsetjmp.

setjmp() и sigsetjmp делают программы трудночитаемыми. По возможности используйте альтернативные им функции.

СМ. ТАКЖЕ
longjmp(3), siglongjmp(3)