sigaction
시그널과 핸들러를 핸들링(맵핑) 시켜준다.
함수 원형
struct sigaction {
void (*sa_handler)(int); // 설정할 시그널 핸들러, 핸들어 정의는 예제 소스에 정의 했습니당~
void (*sa_sigaction)(int, siginfo_t *, void *); // sa_handler 대신 사용될 시그널 핸들러
sigset_t sa_mask; // 시그널을 처리하는 동안 블럭화할 시그널 집합
int sa_flags; // 시그널 처리 관련 옵션들
void (*sa_restorer)(void); // 사용안함
}
설명 :
sigset_t sa_mask;
sa_mask는 시그널을 처리하는 동안 블럭화할 시그널 집합으로 시그널을 처리하는 동안 sa_mask에 의해 지정된 스그널이 도착하면 이를 불록화하고 시그널 처리가 끝나면 블럭이 해제되어 시그널을 받는다.
int sa_flags;
sa_flags는 시그널 처리에 관련된 다음과 같은 옵션을 지정하는데, OR 연산을 이용해 여러 옵션을 동시에 지정할 수 도 있다.
예)
void urg_handler(int signo);
main()
{
int state;
struct sigaction act;
act.sa_handler = urg_handler; // urg_handler() 핸들러 함수
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
state = sigaction(SIGURG, &act, 0);
}
void urg_handler(int signo);
{
기타 일처리....
}
설명)
시스템에서 SIGURG가 발생이 되면 &act에 걸린 핸들러를 호출한다.
댓글