atexit

Autres langues

Langue: ja

Version: 2003-11-01 (mandriva - 01/05/08)

Section: 3 (Bibliothèques de fonctions)

名前

atexit - プロセスが正常終了した時に呼び出される関数を登録する

書式

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

説明

atexit() 関数は、与えられた function を、 exit(3) やプログラムの main() 関数からの返りを通じて、プロセスが正常終了した時に呼び出される 関数として登録する。 ここで定義された関数は、登録した順番とは逆の順番で呼び出される。 登録した関数に引き数は渡されない。

POSIX.1-2001 では、このような関数を少なくとも ATEXIT_MAX 個 (32個) 登録できる ことを要求している。その実装でサポートされている実際の上限は sysconf(3) を使って取得できる。

fork(2) で作成された場合、子プロセスは親プロセスの登録のコピーを継承する。 exec(3) ファミリーの関数のいずれかの呼び出しに成功すると、 全ての登録が削除される。

返り値

atexit() 関数は、関数登録が成功した時には 0 を返す。 その他の場合には 0 以外の値を返す。

準拠

SVr4, 4.3BSD, C89, C99, POSIX.1-2001.

注意

atexit() (と on_exit(3)) を使って登録された関数は、 シグナルの配送によりプロセスが異常終了した場合には呼び出されない。

Linux での注意

glibc 2.2.3 以降では、共有ライブラリがアンロードされるときに呼ばれる 関数を登録するために、共有ライブラリの中で atexit() (と on_exit(3)) を使用することができる。

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 
 void
 bye(void)
 {
     printf("That was all, folks\n");
 }
 
 int
 main(void)
 {
     long a;
     int i;
 
     a = sysconf(_SC_ATEXIT_MAX);
     printf("ATEXIT_MAX = %ld\n", a);
 
     i = atexit(bye);
     if (i != 0) {
        fprintf(stderr, "cannot set exit function\n");
        return EXIT_FAILURE;
     }
     return EXIT_SUCCESS;
 }
 

関連項目

_exit(3), exit(3), on_exit(3)