C++ の exit(1)

胡金庫 2023年10月12日
  1. ステータスコードで exit 関数を使用して C++ プログラムを終了する
  2. 障害ステータスコードで exit(1) を使用して C++ プログラムを終了する
C++ の exit(1)

この記事では、C++ で exit() 関数を使用する方法について説明します。

ステータスコードで exit 関数を使用して C++ プログラムを終了する

実行中のプログラムは、一般にオペレーティングシステムではプロセスと呼ばれ、さまざまな状態として表されるライフサイクルがあります。Web サーバーのような実行時間の長いプログラムもありますが、状況によっては、またはユーザーのシグナルを配信することによって、それらのプログラムを終了する必要があります。プロセスの終了は、C 標準の一部で C++ に含まれている exit() 関数を使用して呼び出すことができます。子が待機している場合に親プロセスから読み取ることができるプログラム終了ステータスを指定する 1つの整数引数を取ります。

成功したリターンステータスコードの従来の値は 0 であり、ゼロ以外はエラーコードと見なされます。これは、事前定義されたシナリオに対応している可能性があります。exit 呼び出しに渡される対応する終了コードを示すために、EXIT_SUCCESS および EXIT_FAILURE と呼ばれる 2つのマクロ式があることに注意してください。通常、プログラムには複数のファイルストリームと一時ファイルが開いており、exit が呼び出されると自動的に閉じられるか削除されます。

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  printf("Executing the program...\n");
  sleep(3);

  exit(0);
  //    exit(EXIT_SUCCESS);
}

出力:

Executing the program...

障害ステータスコードで exit(1) を使用して C++ プログラムを終了する

引数値が 1exit 関数は、失敗した終了を示すために使用されます。成功した呼び出しステータスコードの値を返す一部の関数は、戻り値を検証し、エラーが発生した場合にプログラムを終了する条件ステートメントと組み合わせることができます。exit(1)exit(EXIT_FAILURE) を呼び出すのと同じであることに注意してください。

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

int main() {
  if (getchar() == EOF) {
    perror("getline");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(1);
  // exit(EXIT_SUCCESS);
}

出力:

Executing the program...

exit() 関数のもう 1つの便利な機能は、プログラムが最終的に終了する前に、特別に登録された関数を実行することです。これらの関数は通常の関数として定義でき、終了時に呼び出すには、atexit 関数に登録する必要があります。atexit は標準ライブラリの一部であり、唯一の引数として関数ポインタを取ります。複数の atexit 呼び出しを使用して複数の関数を登録でき、exit が実行されると、それぞれが逆の順序で呼び出されることに注意してください。

#include <unistd.h>

#include <iostream>

using std::cout;
using std::endl;

static void at_exit_func() { cout << "at_exit_func called" << endl; }

static void at_exit_func2() { cout << "at_exit_func called" << endl; }

int main() {
  if (atexit(at_exit_func) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  if (atexit(at_exit_func2) != 0) {
    perror("atexit");
    exit(EXIT_FAILURE);
  }

  cout << "Executing the program..." << endl;
  sleep(3);

  exit(EXIT_SUCCESS);
}

出力:

Executing the program...
at_exit_func2 called
at_exit_func called
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook