about函数-apue
abort函数
abort函数的功能是使异常终止,此函数将SIGABRT信号发送给调用进程,让进程捕捉SIGABRT信号目的是在进程终止之前由其执行所需的清理操作。默认情况是终止调用进程。可以采用sigaction和kill函数来实现abort,程序如下:
View Code
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <errno.h>
6 #include <signal.h>
7
8 void myabort()
9 {
10 sigset_t mask;
11 struct sigaction action;
12 sigaction(SIGABRT,NULL,&action);
13 if(action.sa_handler == SIG_IGN)
14 {
15 action.sa_handler = SIG_DFL;
16 sigaction(SIGABRT,&action,NULL);
17 }
18 if(action.sa_handler == SIG_DFL)
19 fflush(NULL);
20 sigfillset(&mask);
21 sigdelset(&mask,SIGABRT);
22 sigprocmask(SIG_SETMASK,&mask,NULL);
23 kill(getpid(),SIGABRT);
24 fflush(NULL);
25 action.sa_handler = SIG_DFL;
26 sigaction(SIGABRT,&action,NULL);
27 sigprocmask(SIG_SETMASK,&mask,NULL);
28 kill(getpid(),SIGABRT);
29 exit(1);
30 }
31 static void sig_abort(int signo)
32 {
33 printf("abort signal.\n");
34 }
35
36 int main()
37 {
38 signal(SIGABRT,sig_abort);
39 myabort();
40 pause();
41 exit(0);
42 }
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <errno.h>
6 #include <signal.h>
7
8 void myabort()
9 {
10 sigset_t mask;
11 struct sigaction action;
12 sigaction(SIGABRT,NULL,&action);
13 if(action.sa_handler == SIG_IGN)
14 {
15 action.sa_handler = SIG_DFL;
16 sigaction(SIGABRT,&action,NULL);
17 }
18 if(action.sa_handler == SIG_DFL)
19 fflush(NULL);
20 sigfillset(&mask);
21 sigdelset(&mask,SIGABRT);
22 sigprocmask(SIG_SETMASK,&mask,NULL);
23 kill(getpid(),SIGABRT);
24 fflush(NULL);
25 action.sa_handler = SIG_DFL;
26 sigaction(SIGABRT,&action,NULL);
27 sigprocmask(SIG_SETMASK,&mask,NULL);
28 kill(getpid(),SIGABRT);
29 exit(1);
30 }
31 static void sig_abort(int signo)
32 {
33 printf("abort signal.\n");
34 }
35
36 int main()
37 {
38 signal(SIGABRT,sig_abort);
39 myabort();
40 pause();
41 exit(0);
42 }
执行结果如下:



浙公网安备 33010602011771号