sigaltstack 서브루틴
용도
스레드가 신호 처리기를 위한 대체 스택의 상태를 정의하고 검사할 수 있도록 합니다.
라이브러리
(libc.a)
구문
#include <signal.h>
int sigaltstack(const stack_t*ss, stack_t*oss);
설명
시그널 스택 서브루틴을 사용하면 스레드가 신호 처리기를 위한 대체 스택의 상태를 정의하고 검사할 수 있습니다. 대체 스택에서 실행되도록 명시적으로 선언된 신호는 대체 스택에서 전달됩니다.
Ss가 널 포인터가 아닌 경우, 시그널 스 택 서브루틴에서 반환 시 적용될 대체 신호 스택을 지정하는 스택_t 구조를 가리킵니다. Ss_flags 멤버는 새 스택 상태를 지정합니다. SS_DISABLE로 설정하면 스택이 비활성화되고 SS_SP 및 SS_SSIZE가 무시됩니다. 그렇지 않으면 스택이 활성화되고 ss_sp 및 ss_size 멤버는 스택의 새 주소와 크기를 지정합니다.
스택으로 사용하기 위해 구현에서 사용할 수 있는 주소 범위는 ss_sp에서 시작하여 ss_sp + ss_size까지입니다.
Oss가 널 포인터가 아닌 경우, 성공적으로 완료되면 시그널 스택 서브루틴 이전에 유효했던 대체 신호 스택을 지정하는 스택_t 구조를 가리킵니다. Ss_sp 및 ss_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 | 활성 스택을 수정하려고 시도했습니다. |