exit() - プログラムの終了

規格

標準/拡張機能 C/C++ 依存項目
ISO C
POSIX.1
XPG4
XPG4.2

C99
C11
Single UNIX Specification、バージョン 3
both  

Format

#include <stdlib.h>

__noreturn__ void exit(int status);

機能説明

exit() 関数は、以下の操作を実行します。

  1. atexit() 関数で登録されたすべての関数を呼び出し、静的ストレージ期間にある C++ オブジェクトを破棄します。これらは、すべて後入れ先出し法 (LIFO) の順に行います。 静的ストレージ期間にある C++ オブジェクトは、コンストラクターの完了とは、逆順に破棄されます (exit() を呼び出した結果、自動オブジェクトが破棄されることはありません)。

    atexit() を使用して登録された関数は、登録とは逆順に呼び出されます。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj1 が初期化される前には、obj1 の消滅が完了するまで呼び出されません。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj2 が初期化された後、obj2 の消滅が開始される前に呼び出されます。

  2. すべてのバッファーをフラッシュして、すべての オープン・ファイルをクローズする。
  3. tmpfile() でオープンされたすべてのファイルを削除する。
  4. プログラムからホスト環境に制御を戻す。

_exit() でのプロセス終了は、exit() でのプログラム終了と同じです。

status 引数は、0 ~ 255 まで (0 と 255 を含む) の値にする か、EXIT_SUCCESS または EXIT_FAILURE マクロの どちらかにすることができます。 EXIT_SUCCESS の値 は stdlib.h で 0、EXIT_FAILURE の値は 8 と定義 されています。

この関数は、独立型システム・プログラミング C (SPC) 環境の C アプリケーション でも使用できます。

POSIX C プログラムでは、exit() は、status の値と共に カーネルに制御を戻します。 それから、カーネルは標準プロセス終了を実行します。

POSIX レベルのスレッド・クリーンアップ・ルーチンは、実行されません。 このルーチンには、pthread_cleanup_push() で作成された クリーンアップ・ルーチンと pthread_key_create() で作成された デストラクター・ルーチンが含まれています。

C++ の特殊な動作: exit() が z/OS® XL C++ プログラムで呼び出された場合、そのプログラムは現行ブロックを終了せずに終了するため、デストラクターがローカル (自動) 変数のために呼び出されることはありません。初期化された静的オブジェクトのデストラクターは、コンストラクターの完了と逆の順序で呼び出されます。

atexit() を使用して登録された関数は、登録とは逆順に呼び出されます。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj1 が初期化される前には、obj1 の消滅が完了するまで呼び出されません。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj2 が初期化された後、obj2 の消滅が開始される前に呼び出されます。

戻り値

exit() は、値を戻しません。

exit() は、戻り値 status と共に制御をそのホスト環境に戻します。

例えば、プログラム A が system() 関数を呼び出してプログラム B を起動した場合、プログラム B が exit() 関数を呼び出すと、プログラム B は、そのホスト環境であるプログラム A に戻ります。

/* This example flushes all buffers, closes any open files, and ends the
   program if it cannot open the file myfile.
 */
#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main(void)
{
⋮
   if ((stream = fopen("myfile.dat", "r")) == NULL)
   {
      printf("Could not open data file\n");
      exit(EXIT_FAILURE);
      }
}

関連情報