sigaltstack

ëªì¹
     sigaltstack — ìê·¸ë ì¤í 문맥ì ì¤ì ì´ë ìì

íë¡ê·¸ë¨ ë¼ì´ë¸ë¬ë¦¬
     Standard C Library (libc, -lc)

ìì
     <signal.h>

     typedef struct sigaltstack {
             char    *ss_sp;
             size_t  ss_size;
             int     ss_flags;
     } stack_t;
     int sigaltstack(const stack_t *ss, stack_t *oss)

í´ì¤
     sigaltstack() (ì)를 ì¬ì©íë ê²ì¼ë¡ì¨, ì ì ë ìê·¸ëì ì²ë¦¬íë ë¤ë¥¸ ì¤íì
     ì ìí  ì ììµëë¤.  ss íì§ë§ 0 ì´ ìë ê²½ì°, ìê·¸ëì ì ë¬íë¤ ìê·¸ë ì¤í ìì
     í¬ì¸í°ì ì¬ì´ì¦ê° ì§ì ëì´ íë¡ì¸ì¤ê° ê·¸ ì¤íì¼ë¡ ëìì¤ì¼ê¹ ì ë°ì´ ìì¤íìê²
     ì í  ì ììµëë¤.  í¸ë¤ë¬ê° ìê·¸ë ì¤íì¼ë¡ ëìí  íìê° ìë¤ ì¼ì ìê·¸ëì ì¡ìì´
     ê°ë¦¬í¤ë ê²½ì° ( sigaction(2) í¸ì¶ë¡ ì§ì ), ìì¤íì, íë¡ì¸ì¤ê° ê·¸ ì¤íì¼ë¡
     ëìì¤ì¼ë¡ ìëì§ ì´ë¤ì§ë¥¼ ì²´í¬í©ëë¤.  íë¡ì¸ì¤ê° ìê·¸ë ì¤íì¼ë¡ ëìíê³  ìì§
     ìë ê²½ì°, ìì¤íì, ìê·¸ë í¸ë¤ë¬ì ëìì¤ì ìê·¸ë ì¤íì ì ì í ê²ì¼ë¡ ì íí©ëë¤.

     SS_DISABLE íì§ë§ ss_flags ê·¸ë¦¬ê³  ì¤ì ëì´ ìì¼ë©´(ì), ss_sp (ì)ê³¼
     ss_size (ì)ë 무ìëì´ ìê·¸ë ì¤íì 무í¨ê° ë©ëë¤.  ì¡í°ë¸í ì¤íì 무í¨ë¡
     íë ¤ê³  íë©´(ì), sigaltstack() (ì)ë -1 ì ë°í errno (ì)를 EINVAL (ì¼)ë¡
     ì¤ì í©ëë¤. ì¤íì´ ë¬´í¨ê° ëë©´(ì), ëª¨ë  ìê·¸ëì íµìì ì ì ì¤íì¼ë¡ ëìíê²
     ë©ëë¤. ì¤íì´ ë¤ìì ì í¨ì ëì²´ ì¤íì¼ë¡ ì²ë¦¬íëë¡(ë¯ì´) ì§ì ë ëª¨ë  ìê·¸ëì,
     ê·¸ ì§ì ëë¡ ì¬ê°ë©ëë¤.

     oss (ì)를 0 ì´ì¸ì íë©´(ì), íì¬ì ìê·¸ë ì¤í ìíê° ëëë ¤ì§ëë¤.  ss_flags íëì
     ê°ì, íë¡ì¸ì¤ê° íì¬ ìê·¸ë ì¤íì ìë ê²½ì°ë SS_ONSTACK ì, ìê·¸ë ì¤íì´ íì¬
     무í¨ì¸ ê²½ì°ë SS_DISABLE (ì´)ê° ë©ëë¤.

주
     ì¹ SIGSTKSZ (ì)ë, ëì²´ ì¤í area를 í ë¹íë ì¼ë°ì ì¸ ì¼ì´ì¤ë¡ ì¬ì©íë¤
     ë°ì´í¸ì / ìºë¦í°ìì ì ìë©ëë¤. ëì²´ ì¤íì í ë¹ìë, ì¼ë°ì ì¼ë¡ ì´íì ê°ì ì½ëê°
     ì¬ì©ë©ëë¤.

           if ((sigstk.ss_sp = malloc(SIGSTKSZ)) == NULL)
                   /* error return */
           sigstk.ss_size = SIGSTKSZ;
           sigstk.ss_flags = 0;
           if (sigaltstack(&sigstk, 0) < 0)
                   perror("sigaltstack");
     ëí´í¸ ì¬ì´ì¦ ì´ì¸ì í¹ì ëì ì¤í ì¤íì´ì¤ë¥¼ íìë¡ íë¤ ìê·¸ë í¸ë¤ë¬ë¥¼ ì¬ì©íë
     íë¡ê·¸ë¨ììë, ë¤ë¥¸ ë°©ë²ì ì¬ì©í  ì ììµëë¤. ì¹ MINSIGSTKSZ (ì)ë, ëì²´ ì¤íì
     ì¤íì  operating systemê° íìë¡ íë ë°ì´í¸ì / ìºë¦í°ìì ì ìëê³  ììµëë¤.  ëì²´
     ì¤íì ì¬ì´ì¦ë¥¼ ì°ì¶íë ê²½ì°ë, íë¡ê·¸ë¨ì¼ë¡ ì¤í ìê±´ì MINSIGSTKSZ (ì)를
     ì¶ê°í´,  operating systemì ì¤ë²í¤ë를 íì© í  íìê° ììµëë¤.

     ìê·¸ë ì¤íì, ì¤íì íë ê²½í¥ê³¼ alignment ìê±´ì ë°ë¼ ìëì ì¼ë¡ ì¡°ì ë©ëë¤.
     ìê·¸ë ì¤íì, íëì¨ì´ë¡ ë³´í¸ëë¤ ì¼ë ëì§ ìë ê²ë ìì´, íµìì ì¤íê³¼ ê°ì´
     ìëì ì¼ë¡ ``íë''íì§ ììµëë¤. ì¤íì´ ì¤ë²íë¡ì° í´, ì¤íì´ì¤ê° ë³´í¸ëì´ ìë
     ê²½ì°ë, ìê¸°ì¹ ëª»í ê²°ê³¼ê° ëë ì¼ì´ ììµëë¤.

ë°íê°
     The sigaltstack() function returns the value 0 if successful; otherwise
     the value -1 is returned and the global variable errno is set to indicate
     the error.

ìë¬
     ì´íì¤ 1 ê°(ì´)ì´ ë°ìíë©´(ì), sigaltstack() (ì)ë ì²ë¦¬ë¥¼ ì¤í¨í´, ìê·¸ë
     ì¤í 문맥ì ë³ê²½ëì§ ìê³  ë¨ìµëë¤.

     [EFAULT]           ss ì¸ê° oss íì§ë§, íë¡ì¸ì¤ address ê³µê°ì ì í¨í ë¶ë¶ì´
                        ìëë¤ ë©ëª¨ë¦¬ë¥¼ ê°ë¦¬í¤ê³  ììµëë¤.

     [EINVAL]           ì¡í°ë¸í ì¤íì 무í¨ë¡ íë ¤ê³  íìµëë¤.

     [ENOMEM]           ëì²´ ì¤í areaì ì¬ì´ì¦ê° MINSIGSTKSZ ì´íê° ëì´ ììµëë¤.

ê´ë ¨ í목
     sigaction(2), setjmp(3)

ìì¬
     sigaltstack() ì ì  ë²ì ¼ì´ë¤ sigstack() ìì¤í ì½ì 4.2BSD 그리ê³
     ë±ì¥íìµëë¤.