Документация по LinuxLinuxDoc.Ru 🔍

makecontext, swapcontext - управление контекстом пользователя

НАЗВАНИЕ
makecontext, swapcontext - управление контекстом
пользователя

СИНТАКСИС
#include

void makecontext(ucontext_t *ucp, void *func(), int argc,
...);
int swapcontext (ucontext_t *oucp, ucontext_t *ucp);

ОПИСАНИЕ
В системах, совместимых с SysV-like имеется тип ucon-
text_t, определенный в , и четыре функции get-
context(), setcontext(), makecontext() и swapcontext(),
позволяющие переключать на уровне пользователя переключать
контекст между различными подпроцессами (threads) в рамках
одного процесса.

Описание типа и первых двух функций приведено в getcon-
text(2).

Функция makecontext() изменяет контекст, на который
указывает ucp (полученный с помощью вызова getcontext()).
Перед вызовом makecontext() необходимо выделить для этого
контекста новый стек, указав его в ucp->uc_stack, и
определить контекст наследника, указав его в ucp->uc_link.
В дальнейшем, когда этот контекст активируется (с помощью
setcontext() или swapcontext()), то сперва вызвается
функция func с аргументами, указанными за argc (при этом
argc должен содержать количество этих аргументами), а
затем, после возврата из этой функции, активируется
контекст наследника. Если указатель на контекст наследника
равен NULL, то подпроцесс выходит.

Функция swapcontext() сохраняет текущий контекст в
структуру, на которую указывает oucp, а затем активирует
контекст, на который указывает ucp.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном завершении makecontext() возвращает 0, а
swapcontext() не возвращется. (Но может вернуться позже, в
том случае, если будет активирован oucp. При этом, похоже,
swapcontext() возвращает 0.) При ошибке обе функции
возвращают -1 и устанавливают errno.

КОДЫ ОШИБОК
ENOMEM Оставлено недостаточно места в стеке.

ЗАМЕЧАНИЯ
ucp->uc_stack интерпретируется так же, как и в sigalt-
stack(2), то есть эта структура содержит начало и длину
области памяти, используемой как стек, независимо от
направления роста стека. Поэтому программе пользователя
нет необходимости беспокоиться об этом направлении.

СООТВЕТСТВИЕ СТАНДАРТАМ
SUSv2, POSIX 1003.1-2001.
Читать новости Linux в Telegram
Linux - makecontext, swapcontext - управление контекстом пользователя
Мы в соцсетях ✉