quick exitによるプログラムの終了処理
提供: C言語入門
スポンサーリンク
プログラムを終了する前に、プログラムでクリーンアップしておくべき処理を実行する必要があるとき、at_quick_exit()で終了処理を追加しておき、プログラムを終了しなければならないときに、quick_exit()を呼び出すことで、クリーンアップを行ってからプログラムを終了できます。
読み方
- quick_exit
- くいっく いくじっと
- at_quick_exit
- あっと くいっく いくじっと
目次
概要
quick_exitは、C11で追加されました。libcとして提供されています。 似たような機能として、atexit()があります。
at_quick_exit()は、quick_exit()が呼び出されたときに、実行する関数を登録するための関数です。 quick_exit()は、exit()の代わりに使う関数で、at_quick_exit()で登録された関数を実行し、quic_exit()の引数で渡された値でプログラムを終了します。
クリーンアップ関数は、登録された順番と逆に呼び出されます。
exit(),_Exit()やabort()を呼び出した時には、クリーンアップ関数は呼び出されません。
ヘッダファイル
#include <stdlib.h>
クリーンアップ関数を登録する例
ソースコード
/* * quick_exit.c * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <stdio.h> #include <stdlib.h> #include <err.h> void cleanup(void) { (void)puts("cleanup"); } int main(int argc, char *argv[]) { int r = at_quick_exit(cleanup); if (0 != r) { err(EXIT_FAILURE, "can not register cleanup function"); } quick_exit(EXIT_FAILURE); // NOTREACHED exit(EXIT_SUCCESS); }
コンパイル
cc quick_exit.c
実行例
$ ./a.out cleanup
複数の関数を登録した場合
ソース
/* * quick_exit.c * Copyright (C) 2014 kaoru <kaoru@bsd> * * Distributed under terms of the MIT license. */ #include <stdio.h> #include <stdlib.h> #include <err.h> void cleanup1(void) { (void)puts("cleanup1"); } void cleanup2(void) { (void)puts("cleanup2"); } int At_quick_exit( void (*func)(void) ){ int r = at_quick_exit(func); if (0 != r) { err(EXIT_FAILURE, "can not register cleanup function"); } return r; } int main(int argc, char *argv[]) { int r = 0; r = At_quick_exit(cleanup1); r = At_quick_exit(cleanup2); quick_exit(EXIT_FAILURE); // NOTREACHED exit(EXIT_SUCCESS); }
コンパイル
cc quick_exit.c
実行例
クリーンアップ関数は、登録された順番と逆に呼び出されます。
$ ./a.out cleanup2 cleanup1
関連項目
- プログラムの終了とステータス
- quick_exitによるプログラムの終了処理
- atexitによるプログラムの終了処理
ツイート
スポンサーリンク