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 }
复制代码

执行结果如下:

posted @ 2023-08-26 17:21  HelloMarsMan  阅读(36)  评论(0)    收藏  举报