「C言語のexit関数の使い方」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「'''C言語'''/'''C++言語'''のプログラムは、exit関数を使用することで、終了できます。コードを読むと、exit(0)とかexit(1)など、よく...」)
 
行26: 行26:
 
終了ステータスを受け取る意味は、実行したプログラムが成功したのか、それとも失敗したのかを知ることができることです。
 
終了ステータスを受け取る意味は、実行したプログラムが成功したのか、それとも失敗したのかを知ることができることです。
 
たとえば、 grep のコマンドを実行して、成功した場合と失敗した場合で、やりたいことが変わります。grep で特定のキーワードが見つかったら、それらを抽出して、処理する、といったプログラムができます。grepに失敗した場合は、なにもすることがないので、処理を終了する、といったことが考えられます。
 
たとえば、 grep のコマンドを実行して、成功した場合と失敗した場合で、やりたいことが変わります。grep で特定のキーワードが見つかったら、それらを抽出して、処理する、といったプログラムができます。grepに失敗した場合は、なにもすることがないので、処理を終了する、といったことが考えられます。
 +
 +
補足になりますが、シェルでは、コマンドを実行したときに、終了ステータスは、シェルの特別な $? 変数に格納されています。
 
== exit関数の引数に渡す値 ==
 
== exit関数の引数に渡す値 ==
 
exit関数に渡す値は、0や1などの即値が使われることも多いですが、 '''EXIT_SUCCESS''' や '''EXIT_FAILURE''' もよく利用されます。
 
exit関数に渡す値は、0や1などの即値が使われることも多いですが、 '''EXIT_SUCCESS''' や '''EXIT_FAILURE''' もよく利用されます。

2016年4月16日 (土) 19:01時点における版

C言語/C++言語のプログラムは、exit関数を使用することで、終了できます。コードを読むと、exit(0)とかexit(1)など、よく見かけると思います。一体、どういった違いがあるのでしょうか?

読み方

exit
いぐじっと

概要

プログラムを終了するときに、exit関数が利用されます。 exit関数を利用する場合は、stdlib.h をインクルードします。

exit関数は、慣例的に、以下のように使われます。

正常終了
exit(0);
異常終了
exit(1);

exit関数は、プログラムを実行した側に、プログラムの成功や失敗を伝える、一つの手段を提供します。0や1以外の値を利用することで、なぜ、失敗したのか?を使えることも可能になります。慣例的に、1以上は、異常終了と捉えて問題ありません。

exitの引数は?

exit関数の引数は、プログラムの終了ステータスを意味する値を渡します。

exitの引数の意味は?

exit関数を呼び出すことで、プログラムは終了します。

プログラムは、ほかのプログラムによって実行されます。 たとえば、Unix のシェルから実行したコマンドは、シェルが fork して、コマンドを exec (実行) します。シェルが実行したコマンドが成功したのか、失敗したのかを知る方法として、プログラムの終了ステータスがあります。プログラムの終了ステータスは、プログラムがexit関数を呼び出したときの引数の値になります。

exit(0); で終了したら、シェルは 0 を受け取ります。exit(1);で終了したら、シェルは1を受け取ります。

終了ステータスを受け取る意味は、実行したプログラムが成功したのか、それとも失敗したのかを知ることができることです。 たとえば、 grep のコマンドを実行して、成功した場合と失敗した場合で、やりたいことが変わります。grep で特定のキーワードが見つかったら、それらを抽出して、処理する、といったプログラムができます。grepに失敗した場合は、なにもすることがないので、処理を終了する、といったことが考えられます。

補足になりますが、シェルでは、コマンドを実行したときに、終了ステータスは、シェルの特別な $? 変数に格納されています。

exit関数の引数に渡す値

exit関数に渡す値は、0や1などの即値が使われることも多いですが、 EXIT_SUCCESSEXIT_FAILURE もよく利用されます。

即値を利用するとプログラムの意味がわかりにくくなるため、標準化のために、sysexits.h のヘッダファイルに定義されています。

#include <sysexits.h>

いくつか例を挙げます。

EX_USAGE(64)
コマンドの引数に誤りがあったときに、利用します。
EX_OSERR(71)
OSのエラーが検出された場合に利用します。たとえば、パイプが作成できない、といったときに利用します。
EX_OSFILE(72)
OSの本来あるべきファイルがない、といったときに利用します。

詳しくは、sysexits の jman/man をご確認下さい。

ヘッダファイル

exit関数のヘッダファイルの読込は下記の通りです。

#include <stdlib.h>

ソースコード

以下は、exit関数の使い方の例です。

#include <stdlib.h>
int
main(int argc, char *argv[]) {
	if ( /* 処理 * /) {
		// エラー
		exit (EXIT_FAILURE);
	}
	exit (EXIT_SUCCESS);
}

まとめ

  • exit関数は、プログラムを終了させる関数です。
  • exit関数は、プログラムの終了ステータスを設定する関数です。
  • プログラムの呼び出し元は、実行したプログラムの終了ステータスで、プログラムの成功や失敗を判断できます。
  • exit関数に渡す値は、 sysexits.h に定義されています。

関連項目