「C言語のexit関数の使い方」の版間の差分
(ページの作成:「'''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_SUCCESS や EXIT_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 に定義されています。