atexit関数は、プロセスが正常終了した時に呼び出される関数を登録します。ここで登録した関数は、main関数から戻る時や、exit関数が実行された時に呼び出されます。

#include <stdlib.h>
int atexit(void (*function)(void));

*functionは呼び出される関数を指定します。指定する関数は引数および、戻り値はありません。

戻り値として、正常に処理できた場合は0を、エラーの場合は0以外の値を返します。

プログラム 例

#include <stdio.h>
#include <stdlib.h>
#define SIZE 1024

/* プログラム終了メッセージ出力関数 */
void ExitMess(void);

int main()
{
  FILE    *fp;
  char    buff[SIZE];

  /* プログラム終了時に実行する関数を登録 */
  if (atexit(ExitMess) != 0) {
    printf('atexit関数に失敗しました\n');
    abort();
  }

  if ((fp = fopen('temp_1.txt', 'r')) == NULL) {
    printf('ファイルのオープンに失敗しました\n');
    abort();
  }

  while(fgets(buff, SIZE, fp) != NULL) {
    printf('%s', buff);
  }
  fclose(fp);

  return 0;
}

/* プログラム終了メッセージ出力 */
void ExitMess()
{
  printf('★★★ 正常終了しました ★★★\n');
}

例の実行結果

$ ./atexit.exe
Hello World!!.
Bye.
★★★ 正常終了しました ★★★
$
$ mv temp_1.txt temp_bk.txt
$
$ ./atexit.exe
ファイルのオープンに失敗しました
アボートしました
$