关于编号编程中abort()的问题
发帖时,为什么没有粘贴功能,我实在不想抄大段代码
! }! t8 x P2 F) z+ X0 H; k5 g在<<UNIX环境高级编程>>一书中,有关于abort()实现的一段代码
/ a5 X0 A- m; W) o
* y) a& {+ _ h. G3 z2 s1)#include<sys/signal.h>0 j! \5 I' F p1 [' s+ ~' G
2)#include<stdio.h>+ y9 Q' s+ r( j% X9 U1 F0 R, }
3)#include<stdlib.h>
7 e" k+ r) m# z5 ^1 m e4)#include<unistd.h>0 |% p6 @; T) Q5 P7 i2 Q- C
4 p1 v$ G7 f! v, g% w
5)void abort(void)
( f7 w; g/ b; ^% z1 X/ E9 z0 X- f6){/ R, ]" @& W {+ q8 Y ^7 Z
7) sigset_t mask;
: s: s' N' B" B( N9 t, A8) struct sigaction action;
$ B9 ?3 ?& o4 K# Z A3 |
6 F$ ^4 n; `8 e6 l' l9) sigaction(SIGABRT, NULL, &action);
a# O, {' p- |5 s' A" q: F10) if(action.sa_handler==SIG_IGN)
. ?/ h$ Q% ?( ~11) {
9 W+ t I! F% t$ _12) action.sa_handler==SIG_DFL;& D" ]. f* t$ x) Q) ]$ e3 F
13) sigaction(SIGABRT, &action, NULL);
2 n2 i' V' `8 z1 |) U14) } K6 ]% k' I$ R0 H
8 }9 `' y0 U4 n6 ]' \6 w1 z
15) if(action.as_handler==SIG_DFL)
- X) q( j$ ?2 S/ b0 r3 U( M+ ~16) fflush(NULL);- y0 ]# y; O: t0 [/ t( j
|; Q/ P3 j ~) r
17) sigfillset(&mask);
. K6 {6 l6 n0 p) E9 ]" B18) sigdelset(&mask, SIGABRT);
" X# G1 L6 J& ]19) sigprocmask(SIG_SETMASK, &mask, NULL);
6 ]1 J5 Q4 z& L; \! f+ i6 A ( ?# W* p2 y# Q* c* k' k9 o! ^9 {
20) kill(getpid(), SIGABRT);
5 D0 ^, H$ Q5 Y1 a
$ T P; k+ L8 J- r /*if we are here, process caught SIGABRT and return */. O' H3 ]3 p* r/ [
21) fflush(NULL);
& F* M" J( j/ _' A0 F22) action.sa_handler=SIG_DFL;
2 E* }0 G9 y1 x5 k23) sigaction(SIGABRT, &action, NULL);3 T5 c) E& K" a/ w) E7 S
24) sigprocmask(SIG_SETMASK, &mask, NULL);
7 |3 ^% {7 C1 q7 U. y25) kill(getpid(), SIGABRT);
1 ~5 r$ q) s7 T/ f2 w% | : {$ c& c6 l ? |; R0 K
26) exit(1); /* this should never be executed...*/
$ v$ o6 C! h, m( }2 R}
! l K- a1 V" w+ N
+ i& E, ]6 g4 Q$ J9 _我的问题是:7 v3 {) w& ~% }" I6 T) L
17,18,29三行代码是不是应该放到开头,如果不,为什么?请高手指教
1 b2 I5 L1 Y; q