C & LINUX

C / LINUX sigprocmask(2)

Ocean_ 2022. 5. 31. 17:02

함수 기능

현재의 시그널 마스크를 검사하거나 변경하는 시스템 호출 함수이다.

일반적으로 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);
}

함수 결과

 

리눅스시스템 프로그래밍 - 홍지만 저

교재 내에 있는 예제를 바탕으로 작성한 글 입니다.