getcontext, setcontext - считывает или устанавливает контекст пользователя
НАЗВАНИЕgetcontext, setcontext - считывает или устанавливает
контекст пользователя
СИНТАКСИС
#include
int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);
где:
ucp указывает но структуру, определенную в
и содержащую маску сигнала, стек исполнения и
регистры машины.
ОПИСАНИЕ
getcontext(2) получает текущий контекст вызывающего
процесса, сохраняет его в структуре ucontext - на нее
указывает ucp.
setcontext(2) меняет контекст вызывающего процесса на
состояние, сохраненное в структуре ucontext - на нее
указывает ucp. Структура должна либо быть созданной get-
context(2), либо быть переданной в качестве третьего
параметра обработчиком сигналов sigaction(2).
Структура ucontext, создаваемая getcontext(2), определена
в таким образом:
typedef struct ucontext
{
unsigned long int uc_flags;
struct ucontext *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
__sigset_t uc_sigmask;
struct _fpstate __fpregs_mem;
} ucontext_t;
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
getcontext(2) возвращает 0 при нормальном завершении
работы и -1 при ошибках. setcontext(2) ничего не
возвращает при нормальном завершении работы, и возвращает
-1 при ошибках.
СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции соответсвуют стандарту XPG4-UNIX.
ЗАМЕЧАНИЯ
Когда работает обработчик сигнала, то текущий контекст
пользователя сохраняется и ядром создается новый контекст.
Если вызывающий процесс оставляет обработчик сигнала,
используя longjmp(2), то первоначальный контекст
невозможно будет восстановить, а результат последующих
вызовов getcontext(2) будет непредсказуем. Для избежания
этих проблем вместо longjmp(2) используйте в обработчике
сигналов siglongjmp(2) или setcontext(2).