abort函數(shù)的功能是使異常程序終止。
#include <stdlib.h>void abort(void);此函數(shù)不返回
此函數(shù)將SIGABRT信號(hào)發(fā)送給調(diào)用進(jìn)程(進(jìn)程不應(yīng)忽略此信號(hào))。ISO C規(guī)定,調(diào)用abort將向主機(jī)環(huán)境遞送一個(gè)未成功的終止通知,其方法是調(diào)用raise(SIGABRT)函數(shù)。
實(shí)例
程序清單10-18 abort的POSIX.1實(shí)現(xiàn)
#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>voidabort(void) /* POSIX-style abort() function */{ sigset_t mask; struct sigaction action; /* * Caller can't ignore SIGABRT, if so reset to default. */ 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); /* flush all open stdio streams */ /* * Caller can't block SIGABRT; make sure it's unblocked. */ sigfillset(&mask); sigdelset(&mask, SIGABRT); /* mask has only SIGABRT turned off */ sigPRogmask(SIG_SETMASK, &mask, NULL); kill(getpid(), SIGABRT); /* send the signal */ /* * If we're here, process caught SIGABRT and returned. */ fflush(NULL); /* flush all open stdio streams. */ action.sa_handler = SIG_DFL; sigaction(SIGABRT, &action, NULL); /* reset to default */ sigprocmask(SIG_SETMASK, &mask, NULL) /* just in case ... */ kill(getpid(), SIGABRT); /* and one more time */ exit(1); /* this should never be executed ... */}
首先查看是否執(zhí)行默認(rèn)動(dòng)作,若是則沖洗所以標(biāo)準(zhǔn)I/O流。這并不等價(jià)于對(duì)所有打開(kāi)的流調(diào)用fclose(因?yàn)橹粵_洗,并不關(guān)閉它們),但是當(dāng)進(jìn)程終止時(shí),系統(tǒng)會(huì)關(guān)閉所有打開(kāi)的文件。如果進(jìn)程捕捉此信號(hào)并返回,那么因?yàn)檫M(jìn)程可能產(chǎn)生了更多的輸出,所以再一次沖洗所有的流。不進(jìn)行沖洗處理的唯一條件是如果進(jìn)程捕捉此信號(hào),然后調(diào)用_exit或_Exit。在這種情況下,內(nèi)存中任何未沖洗的標(biāo)準(zhǔn)I/O緩沖區(qū)都被丟棄。
如果調(diào)用kill使其為調(diào)用者產(chǎn)生信號(hào),并且如果該信號(hào)是不被阻塞的(程序清單10-18保證做到這一點(diǎn)),則在kill返回前,該信號(hào)(或某個(gè)未決、未阻塞的信號(hào))就被傳送給了該進(jìn)程(http://www.CUOXin.com/nufangrensheng/p/3514817.html)。我們阻塞出SIGABRT之外的所有信號(hào),這樣就可知如果對(duì)kill的調(diào)用返回了,則改進(jìn)程一定已捕捉到該信號(hào),并且也從該信號(hào)處理程序返回。
本篇博文內(nèi)容摘自《UNIX環(huán)境高級(jí)編程》(第二版),僅作個(gè)人學(xué)習(xí)記錄所用。關(guān)于本書(shū)可參考:http://www.apuebook.com/。
新聞熱點(diǎn)
疑難解答
圖片精選