Rechercher une page de manuel
sigaltstack
Langue: ja
Version: 2001-09-27 (openSuse - 09/10/07)
Section: 2 (Appels système)
̾Á°
sigaltstack - ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Î¥³¥ó¥Æ¥¥¹¥È¤òÀßÄꡦ¼èÆÀ¤¹¤ë½ñ¼°
#include <signal.h>int sigaltstack(const stack_t *ss, stack_t *oss);
ÀâÌÀ
sigaltstack() ¤ò»È¤¦¤È¡¢ ¥×¥í¥»¥¹¤Ï¿·¤·¤¤ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤òÄêµÁ¤·¤¿¤ê¡¢ ´û¸¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Î¾õÂÖ¤ò¼èÆÀ¤Ç¤¤ë¡£ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤òÍ׵᤹¤ë¤è¤¦¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¤È (sigaction(2) »²¾È)¡¢¥Ï¥ó¥É¥é¤Î¼Â¹ÔÃæ¤Ï¤½¤Î¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬»È¤ï¤ì¤ë¡£ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò»È¤¦ºÝ¤Î°ìÈÌŪ¤Ê¼ê½ç¤Ï¡¢°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:
- 1.
- ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Ç»È¤¦¥á¥â¥êÎΰè¤ò³ÎÊݤ¹¤ë¡£
- 2.
- sigaltstack() ¤ò»È¤Ã¤Æ¡¢ ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Î¸ºß¤È¾ì½ê¤ò¥·¥¹¥Æ¥à¤ËÃΤ餻¤ë¡£
- 3.
- sigaction(2) ¤ò»È¤Ã¤Æ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò³ÎΩ¤¹¤ëºÝ¡¢ SA_ONSTACK ¥Õ¥é¥°¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢ ¤½¤Î¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤¹¤ë¤³¤È¤ò ¥·¥¹¥Æ¥à¤ËÃΤ餻¤ë¡£ ss °ú¤¿ô¤Ï¡¢¿·¤·¤¤¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò»ØÄꤹ¤ë¤¿¤á¤Ë»È¤¦¡£ ¤Þ¤¿ oss °ú¤¿ô¤Ï¡¢¸½ºß³ÎΩ¤µ¤ì¤Æ¤¤¤ë ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ë¤¿¤á¤Ë»È¤¦¡£ ¤³¤ÎÁàºî¤Î¤¦¤Á 1 ¤Ä¤À¤±¤ò¼Â¹Ô¤µ¤»¤ë¤Ë¤Ï¡¢ »ÈÍѤ·¤Ê¤¤°ú¤¿ô¤ò NULL ¤Ë»ØÄꤹ¤ì¤Ð¤è¤¤¡£ °ú¤¿ô¤È¤Ê¤ë¹½Â¤ÂΤϡ¢°Ê²¼¤Î¤è¤¦¤Ê·¿¤Ç¤¢¤ë:
-
typedef struct { void *ss_sp; /* ¥¹¥¿¥Ã¥¯¤Î¥Ù¡¼¥¹¥¢¥É¥ì¥¹ */ int ss_flags; /* ¥Õ¥é¥° */ size_t ss_size; /* ¥¹¥¿¥Ã¥¯¤Î¥Ð¥¤¥È¿ô */ } stack_t;
¿·µ¬¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò³ÎΩ¤¹¤ë¤Ë¤Ï¡¢ ss.ss_flags ¤ò 0 ¤ËÀßÄꤷ¡¢ ss.ss_sp ¤È ss.ss_size ¤Ë ¥¹¥¿¥Ã¥¯¤Î³«»Ï¥¢¥É¥ì¥¹¤È¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤ò»ØÄꤹ¤ë¡£ Äê¿ô SIGSTKSZ ¤Ï¡¢ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬Ä̾ïɬÍפ¹¤ë ¥µ¥¤¥º¤è¤ê¤â½¼Ê¬Â礤¯ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£ ¤Þ¤¿Äê¿ô MINSIGSTKSZ ¤Ï¡¢ ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Î¼Â¹Ô¤ËɬÍפʺǾ®¥µ¥¤¥º¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£
ÂåÂØ¥¹¥¿¥Ã¥¯¤Ç¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤¬µ¯Æ°¤µ¤ì¤¿¾ì¹ç¤Ë¤Ï¡¢ ¥«¡¼¥Í¥ë¤Ë¤è¤ê¼«Æ°Åª¤Ë¡¢ss.ss_sp ¤Ç»ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹¤Ï Æ°ºî¤·¤Æ¤¤¤ë¥Ï¡¼¥É¥¦¥§¥¢¥¢¡¼¥¥Æ¥¯¥Á¥ã¤ËŬ¤·¤¿¥¢¥É¥ì¥¹¶³¦¤Ë Ä´À°¤µ¤ì¤ë¡£
´û¸¤Î¥¹¥¿¥Ã¥¯¤ò̵¸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢ ss.ss_flags ¤ò SS_DISABLE ¤Ë»ØÄꤹ¤ë¡£ ¤³¤Î¾ì¹ç¡¢ss ¤Î¾¤Î¥Õ¥£¡¼¥ë¥É¤Ï̵»ë¤µ¤ì¤ë¡£
oss ¤¬ NULL °Ê³°¤Î¾ì¹ç¡¢ oss ¤ËÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Î¾ðÊó¤¬ÊÖ¤µ¤ì¤ë¡£ ¤³¤ì¤Ï (¼Â¼ÁŪ¤Ë) sigaltstack() ¤Î¸Æ¤Ó½Ð¤·¤è¤êÀè¤Ë¹Ô¤ï¤ì¤ë¡£ oss.ss_sp ¤È oss.ss_size ¥Õ¥£¡¼¥ë¥É¤Ë ¥¹¥¿¥Ã¥¯¤Î³«»Ï¥¢¥É¥ì¥¹¤È¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤¬ÊÖ¤µ¤ì¤ë¡£ oss.ss_flags ¤Ë¤Ï°Ê²¼¤Î¤É¤Á¤é¤«¤ÎÃͤ¬ÊÖ¤µ¤ì¤ë:
-
- SS_ONSTACK
- ¥×¥í¥»¥¹¤¬ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë (¥×¥í¥»¥¹¤¬´û¤Ë¤½¤Î¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ ¤½¤ì¤ÈƱ¤¸¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤Ë¤ÏÊѹ¹¤Ç¤¤Ê¤¤ÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È)¡£
- SS_DISABLE
- ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬¸½ºß̵¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£
ÊÖ¤êÃÍ
sigaltstack() ¤ÏÀ®¸ù¤·¤¿¾ì¹ç 0 ¤òÊÖ¤¹¡£ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï -1 ¤òÊÖ¤·¤Æ¡¢ ¥¨¥é¡¼¤ò¼¨¤¹ÃÍ¤Ë errno ¤òÀßÄꤹ¤ë¡£¥¨¥é¡¼
- EFAULT
- ss ¤Þ¤¿¤Ï oss ¤Î¤É¤Á¤é¤¬¡¢NULL °Ê³°¤Ç¡¢ ¤«¤Ä¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Î³°¤ò»Ø¤·¤Æ¤¤¤ë¡£
- EINVAL
- ss ¤¬ NULL °Ê³°¤Ç¡¢ss_flags ¥Õ¥£¡¼¥ë¥É¤¬ SS_DISABLE °Ê³°¤Î 0 ¤Ç¤Ê¤¤ÃͤˤʤäƤ¤¤ë¡£
- ENOMEM
- ¿·¤·¤¤ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯ (ss.ss_size) ¤Ë»ØÄꤷ¤¿¥µ¥¤¥º¤¬ MINSTKSZ ¤è¤ê¾®¤µ¤¤¡£
- EPERM
- ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬Í¸ú¤Ç¤¢¤ë¤È¤¤ËÊѹ¹¤ò¹Ô¤ª¤¦¤È¤·¤¿ (¤Ä¤Þ¤ê¡¢¥×¥í¥»¥¹¤¬´û¤Ë¸½ºß¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤¿)¡£
½àµò
SUSv2, SVr4, POSIX.1-2001.Ãí°Õ
ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò»ÈÍѤ¹¤ëºÇ¤â¤è¤¯¤¢¤ë¾ìÌ̤ϡ¢ SIGSEGV ¥·¥°¥Ê¥ë¤ò°·¤¦¤È¤¤Ç¤¢¤ë¡£ SIGSEGV ¤Ï¥×¥í¥»¥¹¤ÎÄ̾ï¤Î¥¹¥¿¥Ã¥¯¤¬ÍøÍѤǤ¤ë¶õ´Ö¤¬»È¤¤²Ì¤¿¤µ¤ì¤¿ºÝ¤Ë À¸À®¤µ¤ì¤ë¥·¥°¥Ê¥ë¤Ç¤¢¤ë¡£¤³¤Î¾ì¹ç¤Ë¤Ï¡¢ SIGSEGV ÍѤΥ·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò¥×¥í¥»¥¹¤Î¥¹¥¿¥Ã¥¯¾å¤Ç¤Ïµ¯Æ°¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤¤¡£ ¤½¤Î¤¿¤á¡¢¤³¤Î¥·¥°¥Ê¥ë¤ò°·¤ª¤¦¤È¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢ ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò»ÈÍѤ·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¥×¥í¥»¥¹¤¬É¸½à¤Î¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò»È¤¤²Ì¤¿¤¹¤³¤È¤¬Í½ÁÛ¤µ¤ì¤ë¾ì¹ç¤Ï¡¢ ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò³ÎΩ¤¹¤ë¤ÈÊØÍø¤Ç¤¢¤ë¡£ Î㤨¤Ð¡¢¥¹¥¿¥Ã¥¯¤¬ºÇ¾å°Ì¥¢¥É¥ì¥¹¤«¤é ²¼°Ì¥¢¥É¥ì¥¹Êý¸þ¤ËÈó¾ï¤Ë¤¿¤¯¤µ¤óÀѤޤì¤Æ¤·¤Þ¤¦¤³¤È¤Ç¡¢ ºÇ²¼°Ì¥¢¥É¥ì¥¹¤«¤é¾å°Ì¥¢¥É¥ì¥¹Êý¸þ¤ËÀѤޤì¤ë¥Ò¡¼¥×¤È¤Ö¤Ä¤«¤Ã¤Æ¤·¤Þ¤¦¾ì¹ç¤ä¡¢ setrlimit(RLIMIT_STACK, &rlim) ¤Î¸Æ¤Ó½Ð¤·¤Ç³ÎΩ¤µ¤ì¤¿ À©¸Â¤Ë㤷¤Æ¤·¤Þ¤Ã¤¿¾ì¹ç¤Ë¡¢¤³¤ÎÍͤʻö¤¬µ¯¤³¤ë¡£ ɸ½à¤Î¥¹¥¿¥Ã¥¯¤ò»È¤¤²Ì¤¿¤·¤Æ¤·¤Þ¤¦¤È¡¢ ¥«¡¼¥Í¥ë¤Ï¥×¥í¥»¥¹¤Ë SIGSEGV ¥·¥°¥Ê¥ë¤òÁ÷¤ë¡£ ¤³¤Î¤è¤¦¤Ê¾õ¶·¤Ç¤Ï¡¢ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¤·¤«¥·¥°¥Ê¥ë¤ò¥¥ã¥Ã¥Á¤Ç¤¤Ê¤¤¡£ Linux ¤¬¥µ¥Ý¡¼¥È¤¹¤ë¿¤¯¤Î¥Ï¡¼¥É¥¦¥§¥¢¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ç¤Ï¡¢ ¥¹¥¿¥Ã¥¯¤Ï²¼°Ì¥¢¥É¥ì¥¹Êý¸þ¤ËÀѤޤì¤ë¡£ sigaltstack() ¤Ï¥¹¥¿¥Ã¥¯¤¬ÀѤޤì¤ëÊý¸þ¤ò¼«Æ°Åª¤Ë·èÄꤹ¤ë¡£ ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤«¤é¸Æ¤Ð¤ì¤ë´Ø¿ô¤â¡¢ÂåÂØ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò»È¤¦ (¥×¥í¥»¥¹¤¬ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¾å¤Ç¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ ¾¤Î¥·¥°¥Ê¥ë¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¥Ï¥ó¥É¥é¤â¤³¤ÎÂåÂØ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤ò»È¤¦)¡£ ɸ½à¤Î¥¹¥¿¥Ã¥¯¤È¤Ï°Û¤Ê¤ê¡¢ ¥·¥¹¥Æ¥à¤ÏÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤ò¼«Æ°Åª¤Ë³ÈÄ¥¤·¤Ê¤¤¡£ ÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯ÍѤ˳ÎÊݤ·¤¿¥µ¥¤¥º¤ò±Û¤¨¤¿¾ì¹ç¡¢ ·ë²Ì¤ÏͽÁۤǤ¤Ê¤¤¡£ execve(2) ¤Î¸Æ¤Ó½Ð¤·¤¬À®¸ù¤¹¤ë¤È¡¢ ´û¸¤ÎÁ´¤Æ¤ÎÂåÂØ¥·¥°¥Ê¥ë¥¹¥¿¥Ã¥¯¤¬ºï½ü¤µ¤ì¤ë¡£ sigaltstack() ¤Ï°ÊÁ°¤Î sigstack() ¤òÃÖ¤´¹¤¨¤ë¤â¤Î¤Ç¤¢¤ë¡£ ²áµî¥×¥í¥°¥é¥à¤È¤Î¸ß´¹À¤Î¤¿¤á¡¢glibc ¤Ç¤Ï sigstack() ¤âÄ󶡤·¤Æ¤¤¤ë¡£ ¿·¤·¤¤¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏÁ´¤Æ sigaltstack() ¤ò»È¤Ã¤Æ½ñ¤¯¤Ù¤¤Ç¤¢¤ë¡£Îò»Ë
4.2BSD ¤Ë¤Ï sigstack() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤¬¤¢¤Ã¤¿¡£ ¤³¤Î´Ø¿ô¤Ï¾¯¤·°Û¤Ê¤Ã¤¿¹½Â¤ÂΤò»È¤Ã¤Æ¤ª¤ê¡¢ ¸Æ¤Ó½Ð¤·¤¿Â¦¤¬¥¹¥¿¥Ã¥¯¤ÎÀѤޤì¤ëÊý¸þ¤òÃΤäƤ¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦ Â礤ʷçÅÀ¤¬¤¢¤Ã¤¿¡£Îã
°Ê²¼¤Î¥³¡¼¥É¤Ç sigaltstack() ¤Î»ÈÍÑË¡¤Î°ìÉô¤ò¼¨¤¹:-
stack_t ss; ss.ss_sp = malloc(SIGSTKSZ); if (ss.ss_sp == NULL) /* ¥Ï¥ó¥É¥ë¥¨¥é¡¼ */; ss.ss_size = SIGSTKSZ; ss.ss_flags = 0; if (sigaltstack(&ss, NULL) == -1) /* ¥Ï¥ó¥É¥ë¥¨¥é¡¼ */;
´ØÏ¢¹àÌÜ
execve(2), setrlimit(2), sigaction(2), siglongjmp(3), sigsetjmp(3), signal(7)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre