getcontext

Autres langues

Langue: ru

Version: 2001-11-15 (openSuse - 09/10/07)

Section: 2 (Appels système)

éíñ

getcontext, setcontext - ÐÏÌÕÞÉÔØ ÉÌÉ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ËÏÎÔÅËÓÔ

ïâúïò

#include <ucontext.h>

int getcontext(ucontext_t *ucp);
int setcontext(const ucontext_t *ucp);

ïðéóáîéå

÷ ÏËÒÕÖÅÎÉÅ ÐÏÄÏÂÎÏÍ SysV, ÓÕÝÅÓÔ×ÕÅÔ Ä×Á ÔÉÐÁ ÄÁÎÎÙÈ mcontext_t É ucontext_t, ËÏÔÏÒÙÅ ÏÐÒÅÄÅÌÅÎÙ × ÆÁÊÌÅ <ucontext.h> É ÞÅÔÙÒÅ ÆÕÎËÃÉÉ getcontext(), setcontext(), makecontext() É swapcontext(), ËÏÔÏÒÙÅ ÐÏÚ×ÏÌÑÀÔ ËÏÎÔÅËÓÔÕ ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÇÏ ÕÒÏ×ÎÑ ÐÅÒÅËÌÀÞÁÔØÓÑ ÍÅÖÄÕ ÎÅÓËÏÌØËÉÍÉ ÎÉÔÑÍÉ (ÔÒÅÄÁÍÉ) ×ÎÕÔÒÉ ÏÄÎÏÇÏ ÐÒÏÃÅÓÓÁ.

ôÉÐ mcontext_t Ñ×ÌÑÅÔÓÑ ÍÁÛÉÎÎÏ-ÚÁ×ÉÓÉÍÙÍ É ÐÒÉÍÉÔÉ×ÎÙÍ ÔÉÐÏÍ ÄÁÎÎÙÈ. ôÉÐ ucontext_t Ñ×ÌÑÅÔÓÑ ÓÔÒÕËÔÕÒÏÊ, ËÏÔÏÒÁÑ ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ ÉÍÅÅÔ ÓÌÅÄÕÀÝÉÅ ÐÏÌÑ:


typedef struct ucontext {

        struct ucontext *uc_link;

        sigset_t uc_sigmask;

        stack_t uc_stack;

        mcontext_t uc_mcontext;

        ...

} ucontext_t;

ÇÄÅ sigset_t É stack_t ÏÐÒÅÄÅÌÅÎÙ × ÆÁÊÌÅ <signal.h>. ÷ ÜÔÏÊ ÓÔÒÕËÔÕÒÅ, uc_link ÕËÁÚÙ×ÁÅÔ ÎÁ ËÏÎÔÅËÓÔ, Ë ËÏÔÏÒÏÍÕ ÂÕÄÅÔ ÏÓÕÝÅÓÔ×̣ΠÐÅÒÅÈÏÄ, ËÏÇÄÁ ÚÁ×ÅÒÛÁÅÔÓÑ ÔÅËÕÝÉÊ ËÏÎÔÅËÓÔ (× ÓÌÕÞÁÅ, ÅÓÌÉ ÔÅËÕÝÉÊ ËÏÎÔÅËÓÔ ÂÙÌ ÓÏÚÄÁÎ Ó ÐÏÍÏÝØÀ makecontext()), uc_sigmask Ñ×ÌÑÅÔÓÑ ÓÐÉÓËÏÍ ÓÉÇÎÁÌÏ×, ËÏÔÏÒÙÅ ÂÌÏËÉÒÕÀÔÓÑ × ÜÔÏÍ ËÏÎÔÅËÓÔÅ (ÓÍ. sigprocmask(2)), uc_stack - ÜÔÏ ÓÔÅË, ËÏÔÏÒÙÊ ÉÓÐÏÌØÚÕÅÔÓÑ ÜÔÉÍ ËÏÔÅËÓÔÏÍ (ÓÍ. sigaltstack(2)) É uc_mcontext Ñ×ÌÑÅÔÓÑ ÍÁÛÉÎÎÏ-ÓÐÅÃÉÆÉÞÅÓËÉÍ ÐÒÅÄÓÔÁ×ÌÅÎÉÅÍ ÓÏÈÒÁΣÎÎÏÇÏ ËÏÎÔÅËÓÔÁ, ËÏÔÏÒÙÊ ×ËÌÀÞÁÅÔ ÒÅÇÉÓÔÒÙ ×ÙÚÙ×ÁÅÍÏÊ ÎÉÔÉ.

æÕÎËÃÉÑ getcontext() ÉÎÉÃÉÁÌÉÚÉÒÕÅÔ ×ÙÛÅÏÐÉÓÁÎÎÕÀ ÓÔÒÕËÔÕÒÕ, ÕËÁÚÙ×ÁÑ ÞÅÒÅÚ ucp ÎÁ ÔÅËÕÝÉÊ ÁËÔÉ×ÎÙÊ ËÏÎÔÅËÓÔ.

æÕÎËÃÉÑ setcontext() ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÅÔ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ËÏÎÔÅËÓÔ, ÎÁ ËÏÔÏÒÙÊ ÕËÁÚÙ×ÁÅÔ ucp. õÓÐÅÛÎÙÊ ×ÙÚÏ× ÎÅ ×ÏÚ×ÒÁÝÁÅÔ ÎÉÞÅÇÏ. ëÏÎÔÅËÓÔ ÄÏÌÖÅÎ ÂÙÔØ ÐÏÌÕÞÅÎ Ó ÐÏÍÏÝØÀ ×ÙÚÏ×Á getcontext() ÉÌÉ makecontext(), ÉÌÉ ÐÅÒÅÄÁÎ ËÁË ÔÒÅÔÉÊ ÁÒÇÕÍÅÎÔ ÏÂÒÁÂÏÔÞÉËÁ ÓÉÇÎÁÌÁ.

åÓÌÉ ËÏÎÔÅËÓÔ ÂÙÌ ÐÏÌÕÞÅÎ ÞÅÒÅÚ ×ÙÚÏ× getcontext(), ×ÙÐÏÌÎÅÎÉÅ ÐÒÏÇÒÁÍÍÙ ÐÒÏÄÏÌÖÁÅÔÓÑ ËÁË ÅÓÌÉ ÂÙ ÜÔÏÔ ×ÙÚÏ× ÚÁ×ÅÒÛÉÌÓÑ ÐÒÏÓÔÙÍ ×ÏÚ×ÒÁÔÏÍ.

åÓÌÉ ËÏÎÔÅËÓÔ ÂÙÌ ÐÏÌÕÞÅÎ ÞÅÒÅÚ ×ÙÚÏ× makecontext(), ×ÙÐÏÌÎÅÎÉÅ ÐÒÏÇÒÁÍÍÙ ÐÒÏÄÏÌÖÁÅÔÓÑ Ó ÐÏÍÏÝØÀ ×ÙÚÏ×Á ÆÕÎËÃÉÉ func, ËÏÔÏÒÁÑ ÚÁÄÁ£ÔÓÑ ËÁË ×ÔÏÒÏÊ ÁÒÇÕÍÅÎÔ ×ÙÚÏ×Á makecontext(). ëÏÇÄÁ ÐÒÏÉÓÈÏÄÉÔ ×ÏÚ×ÒÁÔ ÉÚ ÆÕÎËÃÉÉ func, ×ÙÐÏÌÎÅÎÉÅ ÐÒÏÄÏÌÖÁÅÔÓÑ Ó ÐÏÌÑ uc_link ÓÔÒÕËÔÕÒÙ ucp, ËÏÔÏÒÁÑ ÚÁÄÁ£ÔÓÑ ËÁË ÐÅÒ×ÙÊ ÁÒÇÕÍÅÎÔ ×ÙÚÏ×Á makecontext(). åÓÌÉ ÜÔÏ ÐÏÌÅ ÒÁ×ÎÏ NULL, ÏÓÕÝÅÓÔ×ÌÑÅÔÓÑ ×ÙÈÏÄ ÉÚ ÎÉÔÉ.

åÓÌÉ ËÏÎÔÅËÓÔ ÂÙÌ ÐÏÌÕÞÅÎ Ó ÐÏÍÏÝØÀ ×ÙÚÏ×Á ÏÂÒÁÂÏÔÞÉËÁ ÓÉÇÎÁÌÁ, ÔÏ ÓÔÁÒÙÊ ÔÅËÓÔ ÓÔÁÎÄÁÒÔÁ ÇÏ×ÏÒÉÔ, ÞÔÏ "×ÙÐÏÌÎÅÎÉÅ ÐÒÏÇÒÁÍÍÙ ÐÒÏÄÏÌÖÁÅÔÓÑ Ó ÉÎÓÔÒÕËÃÉÉ ÐÒÏÇÒÁÍÍÙ, ËÏÔÏÒÁÑ ÓÌÅÄÕÅÔ ÚÁ ÉÎÓÔÒÕËÃÉÅÊ, ÐÒÅÒ×ÁÎÎÏÊ ÓÉÇÎÁÌÏÍ". ïÄÎÁËÏ, ÜÔÏÔ ÔÅËÓÔ ÂÙÌ ÕÄÁÌÅÎ × SUSv2 × ×ÅÒÄÉËÔÏÍ "ÒÅÚÕÌØÔÁÔ ÎÅÏÐÒÅÄÅÌ£Î".

÷ïú÷òáýáåíïå úîáþåîéå

÷ ÓÌÕÞÁÅ ÕÓÐÅÈÁ, getcontext() ×ÏÚ×ÒÁÝÁÅÔ 0, Á setcontext() ÎÅ ×ÏÚ×ÒÁÝÁÅÔ ÎÉÞÅÇÏ. ÷ ÓÌÕÞÁÅ ÏÛÉÂËÉ, ×ÏÚ×ÒÁÝÁÅÔÓÑ -1 É ÚÎÁÞÅÎÉÅ errno ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÓÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÍ ÏÂÒÁÚÏÍ.

ïûéâëé

îÅ ÏÐÒÅÄÅÌÅÎÙ.

úáíåþáîéñ

÷ ÒÁÎÎÉÈ ×ÅÒÓÉÑÈ ÜÔÏÇÏ ÍÅÈÁÎÉÚÍÁ ÉÓÐÏÌØÚÏ×ÁÌÓÑ ÍÅÈÁÎÉÚÍ setjmp()/longjmp(). ÷ Î£Í ÎÅ ÂÙÌÏ ÏÐÒÅÄÅÌÅÎÏ ÕÐÒÁ×ÌÅÎÉÅ ËÏÎÔÅËÓÔÏÍ ÓÉÇÎÁÌÁ, ÞÔÏ ÂÙÌÏ ÒÅÛÅÎÏ × ÓÌÅÄÕÝÅÍ ×ÁÒÉÁÎÔÅ ÐÁÒÏÊ sigsetjmp()/siglongjmp(). ôÅËÕÝÉÊ ÍÅÈÁÎÉÚÍ ÄÁ£Ô ÍÎÏÇÏ ÂÏÌØÛÅ ËÏÎÔÒÏÌÑ. ó ÄÒÕÇÏÊ ÓÔÏÒÏÎÙ, ÎÅ ÓÕÝÅÓÔ×ÕÅÔ Ì£ÇËÏÇÏ ÓÐÏÓÏÂÁ ÏÐÒÅÄÅÌÉÔØ ËÁËÏÅ ÉÚ Ä×ÕÈ ÚÎÁÞÅÎÉÊ ×ÏÚ×ÒÁÝÁÅÔ ÐÒÉ ÐÅÒ×ÏÍ ÚÁÐÕÓËÅ ×ÙÚÏ× getcontext() ÉÌÉ ×ÙÚÏ× setcontext(). ðÏÌØÚÏ×ÁÔÅÌØ ÉÍÅÅÔ ÄÏÌÖÅÎ ÐÒÉÄÕÍÁÔØ ÓÏÂÓÔ×ÅÎÎÙÊ ÓÐÏÓÏÂ É ÒÅÇÉÓÔÒÏ×ÕÀ ÐÅÒÅÍÅÎÎÕÀ, ËÏÔÏÒÁÑ ÄÏÌÖÎÁ ÓÏÈÒÁÎÑÅÔÓÑ ËÏÇÄÁ ×ÏÓÓÔÁÎÁ×ÌÉ×ÁÀÔÓÑ ÚÎÁÞÅÎÉÑ ÒÅÇÉÓÔÒÏ×.

åÓÌÉ ×ÏÚÎÉËÎÅÔ ÓÉÇÎÁÌ, ÔÅËÕÝÉÊ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ËÏÎÔÅËÓÔ ÓÏÈÒÁÎÑÅÔÓÑ É ÄÌÑ ÏÂÒÁÂÏÔÞÉËÁ ÓÉÇÎÁÌÁ ÑÄÒÏÍ ÓÏÚÄÁ£ÔÓÑ ÎÏ×ÙÊ ËÏÎÔÅËÓÔ. îÅ ×ÙÈÏÄÉÔÅ ÉÚ ÜÔÏÇÏ ÏÂÒÁÂÏÔÞÉËÁ, ÉÓÐÏÌØÚÕÑ longjmp() - ÎÅÉÚ×ÅÓÔÎÏ, ÞÔÏ ÍÏÖÅÔ ÓÌÕÞÉÔØÓÑ Ó ËÏÎÔÅËÓÔÁÍÉ. ÷ÍÅÓÔÏ ÜÔÏÇÏ ÉÓÐÏÌØÚÕÊÔÅ ×ÙÚÏ×Ù siglongjmp() ÉÌÉ setcontext().

óïïô÷åôóô÷éå óôáîäáòôáí

SUSv2

óíïôòé ôáëöå

sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), sigsetjmp(3), makecontext(3)

ðåòå÷ïä

ðÅÒÅ×£Ì Ó ÁÎÇÌÉÊÓËÏÇÏ ÷ÉËÔÏÒ ÷ÉÓÌÏÂÏËÏ× <corochoone@perm.ru> 2005