본문 바로가기
dev, tech

[펌] sigaction

by 구띵 2006. 12. 27.

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에 걸린 핸들러를 호출한다.

댓글