답변:
signal
구현이 다르기 때문에 가장 신뢰할 수있는 방법은 아닙니다. 을 사용하는 것이 좋습니다 sigaction
. Tom의 코드는 이제 다음과 같습니다.
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void my_handler(int s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = my_handler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
pause();
return 0;
}
int s
논쟁의 여지가 있다고 생각합니다 . sig_t
그 자체가 함수 포인터 유형입니다.
printf()
비동기 신호 안전하지 않으므로 신호 처리기 내부에서 사용할 수 없습니다.
sa_mask
와 sa_flags
.
SIGINT 신호 를 잡아야합니다 (POSIX와 올바르게 대화하고 있습니까?)
sigaction에 대해서는 @Gab Royer의 답변을 참조하십시오.
예:
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
void my_handler(sig_t s){
printf("Caught signal %d\n",s);
exit(1);
}
int main(int argc,char** argv)
{
signal (SIGINT,my_handler);
while(1);
return 0;
}
void my_handler(sig_t s)
해야했습니다 void my_handler(sig_atomic_t s)
.