|
请教一个在《APUE》中提供的abort函数的POSIX.1实现的问题:
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void abort(void)
{
sigset_t mask;
struct sigaction action;
sigaction(SIGABRT, NULL, &action);
if (action.sa_handler == SIG_IGN) {
action.sa_handler = SIG_DFL;
sigaction(SIGABRT, &action, NULL);
}
if (action.sa_handler == SIG_DFL)
fflush(NULL);
sigfillset(&mask);
sigdelset(&mask, SIGABRT);
sigprocmask(SIG_SETMASK, &mask, NULL);
kill(getpid(), SIGABRT);
fflush(NULL);
/* ============================
* 之前一句fflush(NULL),是因为在执行完信号处理程序
* 后还需在此冲刷io缓存,
* 但不理解为什么还要重复执行下面4句?
* 之后马上就执行exit了,重复4句的意义何在?
*/
action.sa_handler = SIG_DFL;
sigaction(SIGABRT, &action, NULL);
sigprocmask(SIG_SETMASK, &mask, NULL);
kill(getpid(), SIGABRT);
/* ============================ */
exit(0);
}
麻烦各位能帮忙解答一下,谢谢了! |
|