getcontext

Autres langues

Langue: ja

Autres versions - même langue

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);

ÀâÌÀ

System V Ū¤Ê´Ä¶­¤Ç¤Ï¡¢ mcontext_t ¤ª¤è¤Ó ucontext_t ¤È¤¤¤¦ 2 ¤Ä¤Î·¿¤È¡¢ getcontext(), setcontext(), makecontext(3), swapcontext(3) ¤È¤¤¤¦ 4 ¤Ä¤Î´Ø¿ô¤¬ <ucontext.h> ¤ÇÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢¤¢¤ë¥×¥í¥»¥¹ÆâÉô¤ÇÀ©¸æ²¼¤Ë¤¢¤ëÊ£¿ô¤Î¥¹¥ì¥Ã¥É´Ö¤Ç¡¢ ¥æ¡¼¥¶¥ì¥Ù¥ë¤Î¥³¥ó¥Æ¥­¥¹¥ÈÀÚÂؤ¨¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£

mcontext_t ·¿¤Ï¥Þ¥·¥ó°Í¸¤Ç¡¢³°Éô¤«¤é¤Ï±£Ê䵤ì¤Æ¤¤¤ë¡£ ucontext_t ·¿¤Ï¹½Â¤ÂΤǡ¢¾¯¤Ê¤¯¤È¤â°Ê²¼¤Î 4 ¤Ä¤Î¥Õ¥£¡¼¥ë¥É¤ò»ý¤Ä¡£




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(3) ¤ÇÀ¸À®¤µ¤ì¤¿¤â¤Î¤Î¾ì¹ç)¡£ uc_sigmask ¤Ï¤³¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ç¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë ¥·¥°¥Ê¥ë·²¤Ç¤¢¤ë (sigprocmask(2) ¤ò¸«¤è)¡£ uc_stack ¤Ï¤³¤Î¥³¥ó¥Æ¥­¥¹¥È¤¬ÍѤ¤¤Æ¤¤¤ë¥¹¥¿¥Ã¥¯¤Ç¤¢¤ë (signalstack(2) ¤ò¸«¤è)¡£ uc_mcontext ¤ÏÊݸ¤µ¤ì¤Æ¤¤¤ë¥³¥ó¥Æ¥­¥¹¥È¤Î ¥Þ¥·¥óÆÃÍ­¤Îɽ¸½·Á¼°¤Ç¤¢¤ê¡¢ ¤³¤³¤Ë¤Ï¸Æ¤Ó½Ð¤·¤¿¥¹¥ì¥Ã¥É¤Î¥Þ¥·¥ó¥ì¥¸¥¹¥¿¤¬³ÊǼ¤µ¤ì¤ë¡£

getcontext() ´Ø¿ô¤Ï¡¢ ¥Ý¥¤¥ó¥¿ ucp ¤¬»Ø¤¹¹½Â¤ÂΤò¡¢ ¸½ºß¥¢¥¯¥Æ¥£¥Ö¤Ê¥³¥ó¥Æ¥­¥¹¥È¤Ë½é´ü²½¤¹¤ë¡£

setcontext() ´Ø¿ô¤Ï¡¢¥Ý¥¤¥ó¥¿ ucp ¤¬»Ø¤¹¥æ¡¼¥¶¥³¥ó¥Æ¥­¥¹¥È¤ò¥ê¥¹¥È¥¢¤¹¤ë¡£ ¸Æ¤Ó½Ð¤·¤ËÀ®¸ù¤¹¤ë¤ÈÊÖ¤é¤Ê¤¤¡£ ¤³¤Î¥³¥ó¥Æ¥­¥¹¥È¤Ï¡¢°ÊÁ°¤Ë getcontext() ¤Þ¤¿¤Ï makecontext(3) ¤ÇÆÀ¤é¤ì¤¿¤â¤Î¤«¡¢ ¤¢¤ë¤¤¤Ï¥·¥°¥Ê¥ë¤ÎÂè»°°ú¿ô¤È¤·¤ÆÍ¿¤¨¤é¤ì¤¿¤â¤Î¤Ë¤Ê¤ë¡£

¥³¥ó¥Æ¥­¥¹¥È¤¬ getcontext() ¤Î¸Æ¤Ó½Ð¤·¤Ë¤è¤Ã¤ÆÆÀ¤é¤ì¤Æ¤¤¤¿¤â¤Î¤Î¾ì¹ç¤Ï¡¢ ¥×¥í¥°¥é¥à¤Ï¤³¤Î¸Æ¤Ó½Ð¤·¤«¤éÊ֤ä¿Ä¾¸å¤«¤é¤Î¤è¤¦¤Ë¼Â¹Ô¤ò·Ñ³¤¹¤ë¡£

¥³¥ó¥Æ¥­¥¹¥È¤¬ makecontext(3) ¤Î¸Æ¤Ó½Ð¤·¤Ë¤è¤Ã¤ÆÆÀ¤é¤ì¤Æ¤¤¤¿¤â¤Î¤Î¾ì¹ç¤Ï¡¢ ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤Ï¤½¤Î makecontext(3) ¸Æ¤Ó½Ð¤·¤ÎÂèÆó°ú¿ô¤Ç»ØÄꤵ¤ì¤¿´Ø¿ô func ¤ò¸Æ¤Ó½Ð¤¹¤«¤¿¤Á¤Ç·Ñ³¤¹¤ë¡£ func ¤«¤éÊÖ¤ë¤È¡¢ makecontext(3) ¸Æ¤Ó½Ð¤·¤ÎÂè°ì°ú¿ô¤Ç»ØÄꤵ¤ì¤Æ¤¤¤¿ ucp ¹½Â¤ÂΤΠuc_link ¥á¥ó¥Ð¤Ç·Ñ³¤¹¤ë¡£ ¤³¤Î¥á¥ó¥Ð¤¬ NULL ¤À¤Ã¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥¹¥ì¥Ã¥É¤Ï½ªÎ»¤¹¤ë¡£

¥³¥ó¥Æ¥­¥¹¥È¤¬¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Î¸Æ¤Ó½Ð¤·¤Ë¤è¤Ã¤ÆÆÀ¤é¤ì¤Æ¤¤¤¿¤â¤Î¤Î¾ì¹ç¤Ï¡¢ ¸Å¤¤É¸½à¤Ë¤è¤ì¤Ð ¡Ö¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤Ï¥·¥°¥Ê¥ë¤Ë¤è¤Ã¤Æ³ä¤ê¹þ¤Þ¤ì¤¿Ì¿Îá¤Î¼¡¤ÎÌ¿Îᤫ¤é·Ñ³¤µ¤ì¤ë¡×¡£ ¤·¤«¤·¤³¤Îʸ¤Ï SUSv2 ¤Çºï½ü¤µ¤ì¤¿¤Î¤Ç¡¢ ¸½ºß¤ÎȽÃǤϡַë²Ì¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡×¤Ç¤¢¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤¹¤ë¤È¡¢ getcontext() ¤Ï 0 ¤òÊÖ¤·¡¢ setcontext() ¤ÏÊÖ¤é¤Ê¤¤¡£ ¼ºÇÔ¤¹¤ë¤È¡¢Î¾¼Ô¤È¤â -1 ¤òÊÖ¤·¡¢errno ¤ò¥¨¥é¡¼¤Ë±þ¤¸¤ÆÀßÄꤹ¤ë¡£

¥¨¥é¡¼

ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£

½àµò

SUSv2, POSIX.1-2001.

Ãí°Õ

¤³¤Î¥á¥«¥Ë¥º¥à¤ÎºÇ¸Å¤Î¼ÂÁõ¤Ï¡¢ setjmp(3)/longjmp(3) µ¡¹½¤Ç¤¢¤Ã¤¿¡£ ¤³¤ì¤é¤Ë¤Ï¥·¥°¥Ê¥ë¥³¥ó¥Æ¥­¥¹¥È¤Î¼è¤ê°·¤¤¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¤Î¤Ç¡¢ ¼¡¤ÎÃʳ¬¤Ç¤Ï sigsetjmp(3)/siglongjmp(3) ¤Î¥Ú¥¢¤¬¸½¤ï¤ì¤¿¡£ ¸½ºß¤Îµ¡¹½¤Ç¤Ï¤º¤Ã¤ÈºÙ¤«¤ÊÀ©¸æ¤¬¤Ç¤­¤ë¡£ °ìÊý getcontext() ¤«¤éÊ֤俤Ȥ­¡¢ ¤³¤ì¤¬ºÇ½é¤Î¸Æ¤Ó½Ð¤·¤Ç¤¢¤Ã¤¿¤«¡¢ ¤½¤ì¤È¤â setcontext() ¸Æ¤Ó½Ð¤·¤«¤é¤Î¤â¤Î¤Ç¤¢¤ë¤«¤ò ¶èÊ̤¹¤ëÍưפÊÊýË¡¤¬¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¡£ ¥æ¡¼¥¶¤Ï¡Ö¤·¤ª¤ê¡×µ¡¹½¤ò¼«Ê¬¤Çºî¤é¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¥ì¥¸¥¹¥¿ÊÑ¿ô¤Ï (¥ì¥¸¥¹¥¿¤Ï¥ê¥¹¥È¥¢¤µ¤ì¤Æ¤·¤Þ¤¦¤Î¤Ç) ¤³¤ì¤ò¤ä¤Ã¤Æ¤¯¤ì¤Ê¤¤¡£

¥·¥°¥Ê¥ë¤¬È¯À¸¤¹¤ë¤È¡¢ ¸½ºß¤Î¥æ¡¼¥¶¥³¥ó¥Æ¥­¥¹¥È¤ÏÊݸ¤µ¤ì¡¢ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥éÍѤΥ³¥ó¥Æ¥­¥¹¥È¤¬¥«¡¼¥Í¥ë¤Ë¤è¤Ã¤ÆÀ¸À®¤µ¤ì¤ë¡£ º£¸å¤Ï¥Ï¥ó¥É¥é¤Ë longjmp(3) ¤ò»È¤ï¤»¤Ê¤¤¤³¤È: ¤³¤Î´Ø¿ô¤Î¥³¥ó¥Æ¥­¥¹¥È²¼¤Ç¤ÎÆ°ºî¤ÏÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ Âå¤ï¤ê¤Ë siglongjmp(3) ¤« setcontext() ¤ò»È¤¦¤³¤È¡£

´ØÏ¢¹àÌÜ

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