함수 기능
현재의 시그널 마스크를 검사하거나 변경하는 시스템 호출 함수이다.
일반적으로 sigprocmask는 시그널을 블록시키고 특정작업의 실행을 마치고나면 블록을 해제하는데 사용된다.
함수 원형
#include<signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
함수 파라메터
how
시그널 마스크의 구체적인 변경 방법을 정의하는 상수 값
set
마스크하거나 마스크를 해제할 시그널 집합의 주소를 나타냄.
oldset
이전 시그널 설정 값을 저장할 시그널 집합의 주소를 나타냄
함수 예제
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int main(void) {
sigset_t sig_set;
int count;
//sig_set을 0으로 초기화
sigemptyset(&sig_set);
//SIGINT 시그널을 sig_set에 추가
sigaddset(&sig_set, SIGINT);
//SIGINT를 블록할 시그널로 만듦
sigprocmask(SIG_BLOCK, &sig_set, NULL);
for(count = 3; 0 < count; count--) {
printf("count %d\n", count);
sleep(1);
}
printf("Ctrl-C에 대한 블록을 해제\n");
//SIGINT에 대한 블록 해제 -> SIGINT의 디폴트 핸들러 수행가능
sigprocmask(SIG_UNBLOCK, &sig_set, NULL);
printf("count중 Ctrl-C입력하면 이 문장은 출력되지 않음.\n");
while(1);
exit(0);
}
함수 결과
리눅스시스템 프로그래밍 - 홍지만 저
교재 내에 있는 예제를 바탕으로 작성한 글 입니다.
'C & LINUX' 카테고리의 다른 글
C / LINUX 디몬 코딩 규칙 daemon (0) | 2022.06.01 |
---|---|
C / LINUX sigpending(2) (0) | 2022.05.31 |
C / LINUX alarm(2) (0) | 2022.05.31 |
C / LINUX raise(3) (0) | 2022.05.31 |
C / LINUX signal(2) (0) | 2022.05.31 |