signal 함수 질문입니다. signal로 호출되는 함수에 인자를 전달하는 방법이 있나요?
글쓴이: idrukawa / 작성시간: 목, 2010/06/03 - 5:21오후
메인 부분에 다음과 같이 인터럽트 시그널이 들어오면 sig_cont함수를 호출하라고 했습니다.
signal(SIGINT, sig_cont);
sig_cont함수는 다음과 같습니다.
void sig_cont (int pid)
{
printf("%d", pid); // 다른 프로세스의 pid입니다. getpid()쓰세요 라고 하지마세요 ㅠ
exit(0);
}
인자로 pid를 넘겨받고 싶은데요.
방법이 없을까요?
main()에서는 pid를 알고 있습니다.
----------------------------------------------------------------------
정리 : cntl+c 인터럽트가 들어왔을때 다른 프로세스의 pid를 이용해서 어떤 작업을하고 종료되도록 프로그래밍 하고 싶은것입니다. 위 방법 말고도 다른 방법이 있으면 알려주세요~~
Forums:
전역변수에 넣어두면
전역변수에 넣어두면 되지요.
signal의 인자로 받을수 있는 함수의 원형이 정해져있고, 이 함수를 호출하는것은 프로그래머가 아니기 때문에, 임의로 함수 인자를 바꾸어서 원하는 인자가 넘어오게 할순 없습니다.
전역변수도 한 가지
전역변수도 한 가지 방법이 될 수 있겠네요
하지만 제 경우에는 사용할 수 없을 것 같습니다.
for()문 안에서 각각의 pid가 존재하거든요.
노파심에...
signal 함수를 for 문에서 여러 번 부른다고 해도, 나중에 ^C 눌렀을 때 여기서 등록한 함수들이 한번씩 호출되는 건 아닙니다.
가장 마지막에 signal로 등록한 함수만 호출됩니다.
pid의 배열을 malloc해서 전역변수로 가리키게 해놓고 signal handler에서 따라가시면 될 것 같네요.
댓글 달기