关于编号编程中abort()的问题
发帖时,为什么没有粘贴功能,我实在不想抄大段代码
7 s- D" u0 ?. \' _' s$ `在<<UNIX环境高级编程>>一书中,有关于abort()实现的一段代码/ @5 K R* R- S+ \9 A- W; L
. S1 J& b" U$ o% Q2 w/ v7 J3 A7 t
1)#include<sys/signal.h>' ?9 _" q2 V* s5 n5 F( }
2)#include<stdio.h>
, B" L# j+ |; {$ {+ E. C, { C3)#include<stdlib.h>
% W2 \. m# I5 N/ y9 i3 a; K4)#include<unistd.h>
8 \/ h& Q) Q3 [" {; O1 @
6 V. Q- `& Y: I' y! H( }6 d5)void abort(void)
% J- n1 B) @( ^+ _% z: I7 z6 r6){" j9 y* B4 k, a! |2 S. S; [( u j
7) sigset_t mask;
3 A3 Y6 n9 z# Q' J8) struct sigaction action;0 d3 C4 h N" y
$ i* E. r L# b# [3 l: J
9) sigaction(SIGABRT, NULL, &action);9 E. V/ M, D3 i& q
10) if(action.sa_handler==SIG_IGN)
1 M. v' x O$ e! L ~11) {& q( n! p- ^8 Q( |% S- q
12) action.sa_handler==SIG_DFL;
: ]( n) O$ g$ o9 \4 \$ m13) sigaction(SIGABRT, &action, NULL);
) w0 u0 h1 Z$ ]% m14) }/ ?) [: a" K3 s6 J, u( A
7 S1 A- J8 U5 n3 z% T( `! j
15) if(action.as_handler==SIG_DFL)
5 n7 O" T- l& ~4 x% M8 J# A; X16) fflush(NULL);
8 f* g; Y! p% h# f) N% s7 k( X
/ r( W: a1 Q, b' f& e+ V17) sigfillset(&mask);
: R" X, b1 B* r$ g* f+ S! O18) sigdelset(&mask, SIGABRT);: }5 N' x. D" U
19) sigprocmask(SIG_SETMASK, &mask, NULL);9 X5 o" u% D6 h# `9 z# K
+ {: }! O9 ^* F: ^+ J
20) kill(getpid(), SIGABRT);
: P. }7 H/ g+ D v
1 M% b8 Z2 r8 o /*if we are here, process caught SIGABRT and return */$ Y$ o% C& r$ \' J6 P; @2 \
21) fflush(NULL);
' k& {% ? E1 E: |22) action.sa_handler=SIG_DFL;
6 p8 U4 y% ~+ D. Y23) sigaction(SIGABRT, &action, NULL);, W9 O+ N7 N- s0 g( G
24) sigprocmask(SIG_SETMASK, &mask, NULL);
# d4 ^ m$ {. N: U25) kill(getpid(), SIGABRT);
# M% q6 M2 }- a' o9 j 9 g* R: _: j- ?# U9 H% k% F( g; i+ W
26) exit(1); /* this should never be executed...*/
& V8 @; z8 f/ k% `' a# o3 V}
; V0 N5 {; v' M# @" Y8 g2 N* k! q! L w, h& e
我的问题是:
/ W" f, q, E a8 n 17,18,29三行代码是不是应该放到开头,如果不,为什么?请高手指教
( Q8 n' w( v5 o' i& V