tail head cat sleep
QR code linking to this page

Man page  — SIGALTSTACK

명칭

sigaltstack – 시그널 스택 문맥의 설정이나 입수

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <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() 시스템 콜은 BSD 4.2 그리고 등장했습니다.

SIGALTSTACK (2) May 1, 1995

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

To err is human...to really foul up requires the root password.