註冊終止函式(main執行結束後呼叫的函式)
void atexit(void (*func)(void))
乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫
驗證atexit函式呼叫註冊函式的順序:
#include
.h>
#include
.h>
void fun1()
void fun2()
void fun3()
void fun4()
int main()
執行結果為:等待3秒後輸出「run main」輸出「run fun4\n run fun3\n
run fun2\n run fun1」
過程分析:
atexit函式先註冊四個fun 函式,然後等待3秒再列印「run main」
(如果main函式中輸出行不加換行\n,則main函式要輸出的內容會先放到標
準輸出緩衝區中,當main 中呼叫exit函式時會做一些資深清理工作同時重新整理
標準輸出緩衝區的內容)
當執行到exit(0)時,exit會自動呼叫這些已經註冊過的函式,但是由於壓
棧過程中先入後出的原則,所以先註冊的函式最後執行。
exit呼叫這些註冊函式的順序與它們等級時候的順序相反
exit函式執行時首先會執行由atexit函式登記的函式,然後會做一些自身清理
工作同時重新整理所有輸出流,關閉所有開啟的流並且關閉通過標準i/o函式tmpfile
()建立的臨時檔案exit函式用於在程式執行時隨時結束程式,引數state是
返回給作業系統,0表示程式正常結束,非0表示程式非正常結束。
atexit 註冊終止函式和t許可權
1.atexit 函式 atexit 註冊終止函式,函式註冊的函式應為不接受任何引數的void函式,exit 呼叫函式的順序與函式註冊的順序正好相反。1 include 2 include3 void fun1 4 7 void fun2 8 11 void fun3 12 15 int main ...
atexit()函式呼叫註冊的順序
按照iso c的規定,乙個程序可以登記至少32個函式,這些函式將由exit自動呼叫。乙個程序可以登記若干個函式,這些函式由 exit自 動呼叫,這些函式被稱為終止處理函式,atexit 函式可以登記這些 函式。exit 呼叫終止處理函式的順 序和atexit 登記的順序相反,如果乙個函式被多次登記,...
atexit函式詳解 登記函式和終止處理函式
對c語言有所了解的人都知道main函式是整個程式的入口,但是其實不然,在核心中可以使用鏈結器來設定程式的開始地方。當核心使 個exec函式執 c程式時,在調 main函式之前先調 個特殊的啟動例程,可執 程式將此例程指定為程式的起始位址。啟動例程從核心獲取命令 引數和環境變數,然後為調 main函式...