(1)exit() _exit() _Exit()
#include <stdlib.h>: void exit( int status ); void _Exit( int status ); #include <unistd.h>: void _exit( int status );

在圖1中可以看出:這三個函數(shù)?用于正常終?止?一個程序,_exit和_Exit?立即進?入內(nèi)核,而exit則要先做?一些清理?工作(調(diào)?用執(zhí)?行各終?止處理程序,刷新所有輸出流,關(guān)閉所有標(biāo)準(zhǔn)I/O流),再進?入內(nèi)核。三個函數(shù)所帶的整型參數(shù)稱為終?止?fàn)顟B(tài)或退出狀態(tài)。
下面寫個小代碼測試一下:
利用PRintf函數(shù)的行緩存方式,遇到“/n”換行符自動從緩存區(qū)讀出記錄
測試exit函數(shù): 測試結(jié)果:
分析:由于exit會刷新輸出流,所以第二個printf的內(nèi)容會顯示

測試_exit()函數(shù)同理_Exit函數(shù)測試結(jié)果:
分析:_exit()函數(shù)不會輸出第二個printf的內(nèi)容

atexit()函數(shù):
如果需要在main退出后再執(zhí)行一段代碼,可以使用atexit()函數(shù)注冊一個函數(shù)。 atexit()函數(shù)介紹:函數(shù)原型:int atexit( void (*fun)( void ) );頭文件:#include<stdlib.h>功能: 注冊終止函數(shù)(即main執(zhí)行結(jié)束后調(diào)用的函數(shù))注意:按照ISO C的規(guī)定,一個進程中最多可以用atexit()注冊32個處理函數(shù),這些函數(shù)將由exit自動調(diào)用。atexit()注冊的函數(shù)類型應(yīng)為不接受任何參數(shù)的void函數(shù),exit調(diào)用這些注冊函數(shù)的順序與它們 注冊時候的順序相反,也即最先注冊的最后調(diào)用,最后注冊的最先調(diào)用。同一個函數(shù)如若登記多次,則也會被調(diào)用多次。
當(dāng)調(diào)用fork時,子進程繼承父進程注冊的atexit;
當(dāng)atexit注冊的函數(shù)中有一個沒有正常返回或被kill,則后續(xù)的注冊函數(shù)都不會被執(zhí)行;
代碼演示:
#include<stdio.h>#include<stdlib.h>void fun1(){ printf("this is fun1/n");}void fun2(){ printf("this is fun2/n");}void fun3(){ printf("this is fun3/n");}int main(){ atexit(fun1); atexit(fun2); atexit(fun3); return 0;}結(jié)果: 
新聞熱點
疑難解答