signal 라이브러리 함수은 다음과 같다.
void (*signal(int sig, void (*func)(int)))(int);
예)
위에 예제처럼 printf를 시그널 핸들러 함수에서 하는건 안전하지 않다.
그보다는, 시그널 핸들러가 플래그를 set하고 메인 함수에서 flag를 체크해서 그에 맞게 처리하는게 좋다.
하지만 X/Open 및 UNIX specifications은 sigaction이라는 프로그래밍 인터페이스를 사용하기를 권장한다.
#include <signal.n>
int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);
설명
sigaction structure는 다음의 멤버들을 가지고 있다.
void (*) (int) sa_handler /* 함수, SIG_DFL, SIG_IGN*/
sigset_t sa_mask /* sa_handler에서 블록할 signal*/
int sa_flags /* signal action modifier*/
sigaction 함수는 시그널 sig와 연관된 action을 설정한다.
- oact가 null이 아닌 경우, sigaction은 이전의 signal action을 쓴다.
-- act가 null인 경우, 아무 일도 안한다.
-- act가 null이 아닌 경우, 시그널을 위한 action이 설정된다.
act에 의해 가리켜지는 sigaction 안에 있는 sa_handler는 시그널 sig가 들어오면 불려지는 함수에 대한 포인터이다.
sa_mask는 sa_handler가 불리기 전에 프로세스의 시그널 mask에 추가될 시그널 세트들을 설정한다.(이 세트들은 블록되어 프로세스로 전달되지 않는 시그널들이다. sa_mask를 사용하면 race condition을 방지할 수 있다)
Return value
sigaction이 성공적일 경우, 0을 리턴하고 아닌 경우 -1을 리턴한다. A
void (*signal(int sig, void (*func)(int)))(int);
예)
위에 예제처럼 printf를 시그널 핸들러 함수에서 하는건 안전하지 않다.
그보다는, 시그널 핸들러가 플래그를 set하고 메인 함수에서 flag를 체크해서 그에 맞게 처리하는게 좋다.
하지만 X/Open 및 UNIX specifications은 sigaction이라는 프로그래밍 인터페이스를 사용하기를 권장한다.
#include <signal.n>
int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);
설명
sigaction structure는 다음의 멤버들을 가지고 있다.
void (*) (int) sa_handler /* 함수, SIG_DFL, SIG_IGN*/
sigset_t sa_mask /* sa_handler에서 블록할 signal*/
int sa_flags /* signal action modifier*/
sigaction 함수는 시그널 sig와 연관된 action을 설정한다.
- oact가 null이 아닌 경우, sigaction은 이전의 signal action을 쓴다.
-- act가 null인 경우, 아무 일도 안한다.
-- act가 null이 아닌 경우, 시그널을 위한 action이 설정된다.
act에 의해 가리켜지는 sigaction 안에 있는 sa_handler는 시그널 sig가 들어오면 불려지는 함수에 대한 포인터이다.
sa_mask는 sa_handler가 불리기 전에 프로세스의 시그널 mask에 추가될 시그널 세트들을 설정한다.(이 세트들은 블록되어 프로세스로 전달되지 않는 시그널들이다. sa_mask를 사용하면 race condition을 방지할 수 있다)
Return value
sigaction이 성공적일 경우, 0을 리턴하고 아닌 경우 -1을 리턴한다. A
'프로그래밍 > C' 카테고리의 다른 글
enum 타입 c vs c++ (0) | 2012.02.04 |
---|---|
system vs exec (0) | 2012.01.30 |
error: invalide storage class for function 'xxxx' (0) | 2011.11.29 |
대상체의 기억수명 (0) | 2011.11.29 |
열거, enum, 이놈 (0) | 2011.11.28 |