「quick exitによるプログラムの終了処理」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「プログラムを終了する前に、プログラムでクリーンアップしておくべき処理を実行する必要があるとき、at_quick_exit()で終了処...」)
(相違点なし)

2014年3月30日 (日) 00:44時点における版

プログラムを終了する前に、プログラムでクリーンアップしておくべき処理を実行する必要があるとき、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()の引数で渡された値でプログラムを終了します。

ヘッダファイル

#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
[2]    3491 exit 1     ./a.out

関連項目

  1. プログラムの終了とステータス
  2. quick_exitによるプログラムの終了処理
  3. atexitによるプログラムの終了処理