atexit()函數的應用

來源:互聯網
上載者:User

進程結束方式

在Unix環境中,有8中方式可以結束一個進程,通常用的是以下五種方式:

1:從main函數返回

2:調用exit函數(會關閉資料流,進行一些處理後再調用核心功能)

3:調用_exit函數或者是_Exit函數(直接調用核心功能)

4:從最後一個線程中返回

5:從最後一個線程中調用pthread_exit

還有三種非正常的結束方式:

6:調用abort

7:接收到訊號

8:應答最後一個線程的取消請求

後三種結束方式和線程有關,以後再討論。

 

函數名: atexit

功 能: 註冊終止函數很多時候我們需要在程式退出的時候做一些諸如釋放資源的操作,但程式退出的方式有很多種,比如main()函數運行結束、在程式的某個地方用exit() 結束程式、使用者通過Ctrl+C或Ctrl+break操作來終止程式等等,因此需要有一種與程式退出方式無關的方法來進行程式退出時的必要處理。方法就 是用atexit()函數來註冊程式正常終止時要被調用的函數。

 

用 法: int atexit(atexit_t func);

 

注意:atexit()註冊的函數類型應為不接受任何參數的void函數。

atexit()函數的參數是一個函數指標,函數指標指向一個沒有參數也沒有傳回值的函數。atexit()的函數原型是:int atexit (void (*)(void));

在一個程式中最多可以用atexit()註冊32個處理函數,這些處理函數的調用順序與其註冊的順序相反,也即最先註冊的最後調用,最後註冊的最先調用。

 

  程式例:

  #include<stdio.h>

  #include<stdlib.h>

  voidexit_fn1(void)

  {

         printf("Exit function #1called\n");

  }

  voidexit_fn2(void)

  {

         printf("Exit function #2called\n");

  }

  intmain(void)

  {

            /* post exit function #1 */

         atexit(exit_fn1);

      /* post exit function #2 */

             atexit(exit_fn2);

         return 0;

  }

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.