C言語,atexit()関数でプロセス終了時に関数を呼び出す

スポンサーリンク

鍛錬 721

C言語,atexit()関数でプロセス終了時に関数を呼び出す

プロセスが正常に終了した際に、事前に登録しておいた関数を呼び出すには、atexit()関数を使用します。
 
以下は、atexit()関数についてです。

#include <stdlib.h>

int atexit(void (*function)(void));
 

 
関数が呼び出される順序は、登録の順序に対して逆の順序となります。

同じ関数を複数登録することが可能で、登録した回数と同じ回数の呼び出しが行われます。

引数

以下は、上記の引数についてです。

引数 意味
void (*function)(void) 登録する関数

戻り値

以下は、戻り値についてです。

戻り値
int 成功した場合 0
int エラーの場合 0 以外
スポンサーリンク

プログラム

以下は、プロセスの正常終了時に関数を実行するプログラム、test_atexit.c です。

今回は、3 つの関数を事前に登録しています。

登録した関数名
TestFuncAAA
TestFuncBBB
TestFuncCCC
// include
#include <stdio.h>
#include <stdlib.h>

// prototype
void TestFuncAAA(void);
void TestFuncBBB(void);
void TestFuncCCC(void);

// main
int main(void)
{
	// プロセス正常終了時に呼び出す関数を登録
	if (atexit(TestFuncAAA) != 0)
		goto ERROR;
	if (atexit(TestFuncBBB) != 0)
		goto ERROR;
	if (atexit(TestFuncCCC) != 0)
		goto ERROR;
	
	// TestFuncBBBだけ追加で複数登録
	if (atexit(TestFuncBBB) != 0)
		goto ERROR;
	if (atexit(TestFuncBBB) != 0)
		goto ERROR;
	if (atexit(TestFuncBBB) != 0)
		goto ERROR;
	
	printf("---------- プログラム終了 ----------\n");
	
	exit(EXIT_SUCCESS);
	
ERROR:
	printf("ERROR,atexit\n");
	exit(EXIT_FAILURE);
}

void TestFuncAAA(void)
{
	printf("TestFuncAAA()が呼び出されました\n");
}

void TestFuncBBB(void)
{
	printf("    ");
	printf("TestFuncBBB()が呼び出されました\n");
}

void TestFuncCCC(void)
{
	printf("TestFuncCCC()が呼び出されました\n");
}
スポンサーリンク

実行結果

以下は、プログラム test_atexit.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_atexit.c -o test_atexit
***@ubuntu:~/***/test/c$ ./test_atexit
---------- プログラム終了 ----------
    TestFuncBBB()が呼び出されました
    TestFuncBBB()が呼び出されました
    TestFuncBBB()が呼び出されました
TestFuncCCC()が呼び出されました
    TestFuncBBB()が呼び出されました
TestFuncAAA()が呼び出されました

 
上記に示した通り、プロセスの正常終了時に関数を呼び出すことができました。

タイトルとURLをコピーしました