컴퓨터 공부/Advanced UNIX System Programming

[5월 7일 3교시] 시그널 2

려리군 2009. 5. 7. 11:00

#include<unistd.h>

unsigned int alarm(unsigned int seconds);

지정된 시간 후 SIGALRM 시그널이 발생하도록 타이머 설정.

alarm을 호출하면 이전 남은 시간값 리턴 후 다시 알람 설정.

int pause();

시그널이 전달될 때까지 프로세스의 실행을 지연.


시그널 세트

복수개의 시그널을 표현하는 데이터 형

sigset_t형 변수


시그널 세트 조작함수.

#include<signal.h>


int sigemptyset(sigset_t *set);                             // set 비트 모두 clear

int sigfillset(sigset_t *set);                                  // set 비트 모두 set

int sigaddset(sigset_t *set, int signo);                  // signo에 해당하는 비트 set

int sigdelset(sigset_t *set, int signo);                   // signo에 해당하는 비트 clear

int sigismember(const sigset_t *set, int signo);    // signo에 해당하는 비트 검사.


#include <signal.h>

int sigprocmask(int how, const sigset_t *set, sigset_t *oset);

set으로 마스크를 변경한다.

how : 시그널 마스크를 변경시키는 방식

 - SIG_BLOCK : set인자들을 set, SIG_UNBLOCK : set인자들을 clear, SIG_SETMASK : set인자로 시그널을 대체.

set : 변경될 시그널 마스크 내용

oset : 이전 시그널 마스크 내용


#include <signal.h>

int sigpending(sigset_t *set);

블록되어 있는 시그널 집합을 set으로 출력(out)


#include<signal.h>

int sigaction(int signo, const struct sigaction *act, struct sigaction *oact);

signo : 시그널 번호

act : 시그널에 대해 변경될 처리방법 지정

oact : 현재의 처리 방법 저장.


struct sigaction{

        void (*sa_handler)();      // 시그널 처리 함수 포인터

        sigset_t sa_mask;          // 핸들러 수행시 블록될 함수. 수행 후 다시 원래대로 돌아옴.

        int sa_flags;                  

}