signal 함수에서..
글쓴이: Seven.. / 작성시간: 수, 2004/04/07 - 5:21오후
(void)signal(SIGINT, func);
이렇게 하면
SIGINT(Ctrl_C)의 시그널이 발생할때
func함수가 실행되잖아요..
그런데 이때 func함수는
void func(int sig);
이렇게 되어서
SIGINT를 받는것 같더군요
func함수에 인자를 더 넘겨주고 싶은데
어떻게 하면 좋을까요?
func에서 int하나와 struct 형 하나가 필요한데..
그렇다고 전역으로 잡기는 코드가 찝찝해보이고;;
어떤 방법이 좋을까요? :oops:
Forums:
그냥 전역으로 잡으세요.
시그널 핸들러 함수는 미리 정의되어있는 것입니다.
임의로 바꿀수는 없으며 따라서 전역으로 잡고 쓰셔야 됩니다.
========================================
* The truth will set you free.
ㅜㅜ
:(
결국 전역변수를 사용해야 한다는 거네요;;
에잇 -0- 영.. 보기가 ! -_- !
VENI VIDI VICI
-,-
#include <signal.h>
int sigaction(int sig, const struct sigaction *act, struct
sigaction *oact);
signal() 함수는 과거 호환성을 위하여 남아 있다고 합니다.
새로운 코드에서는 sigaction을 사용하시는게 좋다고 하네요
sigaction()은 signal() 함수에서 정의할수 없는
불명확한...동작들을.. 또는 시스템 마다 차이가 있는 동작들을..
프로그래머가 플래그 설정등을 통해서
원하는대로 할 수 있습니다. 포직스 표준이구용
암튼.. signal()인터페이스를 개선시켜서
프로그래머가 시스템에게 구체적으로 지시할수 있게 해준거죠
그래서.. sigaction을 사용하면
signal 핸들러를 한가지만 사용해야 하는 것은 아니구요
한개 더 사용할수 있습니다.
자세한건 매뉴얼을 보시구용
설정할수 있는 플래그에는 SIG_INFO가 있는데 이때
아래와 같은 핸들러를 사용하게 됩니다.
void (*sa_sigaction)(int, siginfo_t *, void *);
첫번째인자는 시그널번호..............
두번째 인자는 시그널발생원인같은 시그널 부가정보이구요
세번째 인자는 시그널 전달시 프로세스 컨텍스트 라고 하는데..
이것은 잘 모르겠네요..암튼 커널에 의해 채워지는 데이타들이죠
혹시...필요로 하는 부가정보가...
두번째 세번째 인자에 있을수도 있을것 같아서
함 적어봅니다.
늦은밤 야근하며.......
댓글 달기