atexit函數用法

 
                                                                        atexit函數的用法
首先先看一個實例:


       根據上方例圖就會發現:atexit函數先註冊四個fun函數,然後等待2秒,再打印"this is fun(n)"(如果main函數中輸出部分不加\n,則main函數要輸出的內容會先放到標準輸出緩衝區中,當main中調用exit函數的時候,會做一些自身清理工作,同時刷新標準輸出緩衝區中的內容),當執行到exit(0)時,exit會自動調用這些已註冊過的函數,但是由於壓棧過程中先入後出的原則,所以先註冊的函數最後執行

關於atexit:


一個進程可以登記多達32個函數,這些函數將由exit自動調用,通常這32個函數被稱爲終止處理程序,並調用atexit函數來登記這些函數,atexit的參數是一個函數地址,當調用此函數時無須傳遞任何參數,該函數也不能返回值,atexit函數稱爲終止處理程序註冊程序,註冊完成以後,當函數終止是exit()函數會主動的調用前面註冊的各個函數,但是exit函數調用這些函數的順序於這些函數登記的順序是相反的,這實質上是參數壓棧造成的,參數由於壓棧順序而先入後出。同時如果一個函數被多次登記,那麼該函數也將多次的執行。

關於exit:

exit函數運行時首先會執行由atexit()函數登記的函數,然後會做一些自身的清理工作,同時刷新所有輸出流、關閉所有打開的流並且關閉通過標準I/O函數tmpfile()創建的臨時文件。
exit()函數用於在程序運行的過程中隨時結束程序,exit的參數state是返回給操作系統,返回0表示程序正常結束,非0表示程序非正常結束
 
發佈了70 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章