abort() - プログラムの停止

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
C11
Single UNIX Specification、バージョン 3

両方  

形式

#include <stdlib.h>

__noreturn__ void abort(void);

機能説明

プログラム異常終了を起こし、ホスト環境に制御を戻します。abort() 関数は、バッファーのすべてをフラッシュし、オープン・ファイルをすべてクローズします。 異常終了では、atexit() リスト関数は 実行されない ので注意してください。

abort() 関数が呼び出されたときに、SIGABRT 用のハンドラーがユーザーにあれば、SIGABRT が上がります。ただし、デフォルト・アクションに関連したハンドラーが戻るときに SIGABRT が再び上がります。ユーザーのハンドラーがリセットされた場合でも、コード・パスはそのハンドラーを一度パススルーするだけです。同じことが SIGABRT が無視された場合に起こります。つまり、異常終了が起こります。

SIGABRT がシグナル・ハンドラーにキャッチされ、さらにシグナル・ハンドラーが戻らない場合、abort() 関数によるプログラム終了処理 は行われません。setjmp() および longjmp() でハンドラーから「ジャンプ」する ことにより、戻らないようにすることができます。z/OS® XL C プログラムでは、sigsetjmp() および siglongjmp() でハンドラー からジャンプできます。

詳しくは、 「z/OS XL C/C++ プログラミング・ガイド」の『ランタイム・ユーザー出口の使用』の トピックにあるプロセス終了の 情報を参照してください。

POSIX C の特殊な動作: abort() に関する POSIX の特殊な動作へのアクセスを取得する には、POSIX ランタイム・オプションを ON に設定する必要があります。

pthread_kill() を使用して、abort() を呼び出すと、SIGABRT シグナルが 上がり、その結果、そのシグナルは同じスレッドに向けられます。abort() により生成された SIGABRT シグナルをブロックすることは できません。

POSIX では、sigsetjmp() が以前に発行されたコード内の 場所で、ハンドラーは、siglongjmp() を使用して環境を復元できます。このようにして、アプリケーションは終了プロセスを 避けることができます。

C++ の特殊な動作: abort() が z/OS XL C++ プログラム から呼び出されると、そのプログラムは、現行ブロックを残さずに即時に終了 します。 atexit() に渡される関数と、静的およびローカル (自動) オブジェクト用 のデストラクターは呼び出されません。

デフォルト では、z/OS XL C++ 関数 の terminate() が abort() を呼び出します。

戻り値

z/OS の異常終了戻りコードは 2000 です。

CELEBA01
⁄* CELEBA01

   This example tests for successful opening of the file myfile.
   If an error occurs, an error message is printed and the program
   ends with a call to the abort() function.

 *⁄
#include <stdio.h>
#include <stdlib.h>

int main(void)
{

   FILE *stream;
   unlink("myfile.dat");
   if ((stream = fopen("myfile.dat", "r")) == NULL)
   {
      printf("Could not open data file¥n");
      abort();

      printf("Should not see this message¥n");
   }
}

関連情報