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() 関数は、以下の操作を実行します。
- atexit() 関数で登録されたすべての関数を呼び出し、静的ストレージ期間にある
C++ オブジェクトを破棄します。これらは、すべて後入れ先出し法 (LIFO) の順に行います。 静的ストレージ期間にある C++ オブジェクトは、コンストラクターの完了とは、逆順に破棄されます (exit() を呼び出した結果、自動オブジェクトが破棄されることはありません)。
atexit() を使用して登録された関数は、登録とは逆順に呼び出されます。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj1 が初期化される前には、obj1 の消滅が完了するまで呼び出されません。 atexit() を使用して登録された関数は、静的ストレージ期間のオブジェクト obj2 が初期化された後、obj2 の消滅が開始される前に呼び出されます。
- すべてのバッファーをフラッシュして、すべての オープン・ファイルをクローズする。
- tmpfile() でオープンされたすべてのファイルを削除する。
- プログラムからホスト環境に制御を戻す。
_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);
}
}関連情報
- 「z/OS XL C/C++ プログラミング・ガイド」の『システム・プログラミング C (SPC) 機能』
- 「z/OS XL C/C++ プログラミング・ガイド」の『ランタイム・ユーザー出口の使用』
- stdlib.h — 標準ライブラリー関数
- abort() - プログラムの停止
- atexit() - プログラム終了処理関数の登録
- _exit() - プロセスの終了とクリーンアップのバイパス
- _Exit() - プロセスの終了
- signal() — 割り込みの処理
- wait() - 子プロセス終了の待機
- waitpid() - 特定の子プロセス終了の待機