sigaltstack 서브루틴

용도

스레드가 신호 처리기를 위한 대체 스택의 상태를 정의하고 검사할 수 있도록 합니다.

라이브러리

(libc.a)

구문

#include <signal.h>

int sigaltstack(const stack_t*ss, stack_t*oss);

설명

시그널 스택 서브루틴을 사용하면 스레드가 신호 처리기를 위한 대체 스택의 상태를 정의하고 검사할 수 있습니다. 대체 스택에서 실행되도록 명시적으로 선언된 신호는 대체 스택에서 전달됩니다.

Ss가 널 포인터가 아닌 경우, 시그널 스 택 서브루틴에서 반환 시 적용될 대체 신호 스택을 지정하는 스택_t 구조를 가리킵니다. Ss_flags 멤버는 새 스택 상태를 지정합니다. SS_DISABLE로 설정하면 스택이 비활성화되고 SS_SPSS_SSIZE가 무시됩니다. 그렇지 않으면 스택이 활성화되고 ss_spss_size 멤버는 스택의 새 주소와 크기를 지정합니다.

스택으로 사용하기 위해 구현에서 사용할 수 있는 주소 범위는 ss_sp에서 시작하여 ss_sp + ss_size까지입니다.

Oss가 널 포인터가 아닌 경우, 성공적으로 완료되면 시그널 스택 서브루틴 이전에 유효했던 대체 신호 스택을 지정하는 스택_t 구조를 가리킵니다. Ss_spss_size 멤버는 스택의 주소와 크기를 지정합니다. Ss_flags 멤버는 스택의 상태를 지정하며 다음 값 중 하나를 포함할 수 있습니다:

항목 설명
SS_ONSTACK 프로세스는 현재 대체 신호 스택에서 실행 중입니다. 프로세스가 실행되는 동안 대체 신호 스택을 수정하려고 시도하거나 실패합니다. 이 플래그는 프로세스에 의해 수정되어서는 안 됩니다.
SS_DISABLE 대체 신호 스택은 현재 비활성화되어 있습니다.

SIGSTKSZ 값은 대체 스택 영역을 수동으로 할당할 때 일반적인 경우를 커버하기 위해 사용되는 바이트 수를 지정하는 시스템 기본값입니다. 최소 스택 크기는 시그널 핸들러의 최소 스택 크기로 정의됩니다. 대체 스택 크기를 계산할 때 프로그램은 시스템 구현 오버헤드를 허용하기 위해 스택 요구 사항에 해당 양을 추가해야 합니다.

실행 함수 중 하나를 성공적으로 호출한 후에는 새 프로세스 이미지에 대체 스택이 없습니다.

매개변수

항목 설명
ss 신호 처리 중에 사용할 대체 스택을 지정하는 스택_t 구조체에 대한 포인터입니다.
OSS 현재 사용 중인 대체 스택을 나타내는 스택_t 구조체에 대한 포인터입니다.

리턴 값

성공적으로 완료되면 시그널스택 서브루틴은 0을 반환합니다. 그렇지 않으면 -1 반환하고 오류를 표시하도록 errno를 설정합니다.

항목 설명
-1 성공하지 못했으며 errno 전역 변수가 다음 오류 코드 중 하나로 설정되어 있습니다.

오류 코드

항목 설명
EINVAL Ss 매개 변수는 널 포인터가 아니며, ss가 가리키는 ss_flags 멤버에는 SS_DISABLE 이외의 플래그가 포함되어 있습니다.
ENOMEM 대체 스택 영역의 크기가 MINSIGSTKSZ보다 작습니다.
EPERM 활성 스택을 수정하려고 시도했습니다.