atexit〜プログラム終了時に処理を行う〜


目次に戻る


プログラムが終了する際、「これだけは絶対やらなくては。」と思う処理というのは案外多い。たとえばmallocで確保したメモリ領域をfreeするとか、共有メモリを解放するとかだ。(一部のOSではmallocで確保したメモリをプログラム終了時に解放してくれない。)
 
このような処理はmain関数の最後に処理を記述すればよいのだが、これではプログラム中でexitが使えない。
終了用の関数を用意するのもいいが、チーム開発で他の人がこの関数を呼んで終わらせるという保証が無い。
 
そんな時便利なのが関数atexit()

これはプログラムが終了したときに行う処理を登録してくれる関数です。とりあえず下のサンプルを実行してみてください。

 
#include <stdio.h>
#include <stdlib.h>

void saigoniyobareru( void )
{
    printf("終了したよ\n");
}

main()
{
    /* 終了関数の登録 */
    atexit( saigoniyobareru );

    printf("1文字入力して改行(Enter)キーを押して。\n");
    if( getc(stdin) == 'q' ){ 
        printf("Exitするね\n");
        exit(-1);
    }

    return 0;
}

実行すると必ず最後に”終了したよ”と文字がでるのがわかったでしょうか。
大したこと無いと言えばそれまでですが、知っていて損は無い関数だと思います。
 
使用にあたって注意点を一つ。ateitで登録された関数は、killやプログラムの強制終了で終了させた場合等は実行されません。本来ならこういう時にこそ実行して欲しいのですが、残念です。


目次に戻る