Cのexit(0)とexit(1)の違いは何ですか?


96

誰か教えてもらえますか?違いは何であるexit(0)exit(1)C言語では?

回答:


117

違いは何であるexit(0)exit(1)C言語では?

exit(0)プログラムが正常に終了し、完全に移植可能である
exit(1)ことを示し、While (通常)は異常終了を示します。ただし、その使用方法はポータブルではありません。

C標準では、Cプログラムから終了ステータスを定義EXIT_SUCCESSEXIT_FAILUREて返すことに注意してください。

0およびEXIT_SUCCESSは、正常終了を示すために規格によって指定された値ですが、EXIT_FAILURE異常終了を返すための標準値のみです。1ただし、多くの実装で同じに使用されます。


参照:

C99標準:7.20.4.3 exit機能
パラ5

最後に、制御がホスト環境に戻ります。statusの値が0またはの場合 EXIT_SUCCESS、ステータスが正常に終了したことを示す、実装で定義された形式が返されます。statusの値がの場合、EXIT_FAILURE実装が定義した形式のステータスが失敗して終了します。それ以外の場合、返されるステータスは実装定義です。


1
非移植性について説明できますか?特に、ゼロ以外の終了コードは、さまざまな障害モードを示します。アプリケーションがこれを使用して詳細情報を提供することは一般的です。EXIT_FAILUREしたがって、単一の定数()では不十分です。
Konrad Rudolph

@KonradRudolph:関連する引用を追加しました。お役に立てば幸いです。
Alok Save

1
@Als:POSIXが標準です。C標準は、「実装定義」と言うかもしれないが、それは実際には実装がするとき、「ポータブルではない」と言ってと等価ではない規約に同意します。
Cat Plus Plus

1
@PeterM:この規則を使用しないプラットフォームを見つけてください。それはの移植は、いくつかの専門/組込み/自立式/どんな環境であると思われますexitあなたの懸念の少なくともある(地獄も存在しない場合がありますことが可能なライブラリC。何も移植性がありません!!! 111)。
Cat Plus Plus

3
@CatPlusPlus:OpenVMSでは、exit奇数の値で呼び出すと成功を示します。exit(0)Cに準拠するために、特殊なケースとして扱われます。はい、POSIXは標準ですが、すべてのシステムがそれに準拠しているわけではありません。POSIXを前提とするコードを記述したい場合は、自由に記述できますが、コードの移植性が制限されます。
キーストンプソン

12

exit C言語では、終了ステータスを表す整数を取ります。

終了成功

通常、0の終了ステータスは、成功、またはプログラムの実行が成功したことによる意図的な終了と見なされます。

終了失敗

終了ステータス1は失敗と見なされ、通常、プログラムは何らかの理由で終了する必要があり、通常のプログラムフローのすべてを正常に完了できなかったことを意味します。

以下は、終了ステータスについて話しているGNUリソースです。


@Alsが述べたように、0と1の代わりに2つの定数を使用する必要があります。

EXIT_SUCCESS 規格によりゼロと定義されています。

EXIT_FAILURE 標準によって1つに制限されていませんが、多くのシステムでは1つとして実装されています。


9

exit(0)プログラムがエラーなしで終了したことを示します。exit(1)エラーがあったことを示します。

1エラーの種類を区別する以外に、異なる値を使用できます。


3

0前者の場合と1後者の場合の違いは、環境に返される値です。

$ ./prog_with_exit_0
$ echo $?
0
$

そして

$ ./prog_with_exit_1
$ echo $?
1
$

また、マクロの値 EXIT_SUCCESSと関数のEXIT_FAILURE引数として使用されるのexitは実装定義ですが、通常はそれぞれ0ゼロ以外の数値に設定されます。(POSIXはEXIT_SUCCESS0である必要があります)。したがって、通常exit(0)は成功とexit(1)失敗を意味します。

exit内の引数を持つ関数の呼び出しmain機能は、文と同じですreturn、同じ引数を持ちます。


2

exitは、呼び出し元の実行中のプロセスを終了するために使用されるシステムコールです。終了するパラメータは、親プロセスに子プロセスのステータスを通知するために使用されます。したがって、exit(0)はプロセスの正常な実行を示すために(そしてしばしば使用されます)、exit(1)はエラーにフラグを立てるために使用できます。参照リンク


1

exit(0)以下のように振る舞うreturn 0におけるmain()機能、exit(1)のように振る舞いますreturn 1。標準は、そのmain関数return 0です。ゼロ以外の値がプログラムが何らかのエラーで終了したことを意味しながらプログラムが正常に終了した場合。


1

exit(0)は、exit(EXIT_SUCCESS)と同等です。

exit(1)は、exit(EXIT_FAILURE)と同等です。

失敗すると、通常、プロセスを終了するために正の値が返されます。シェルで$?を使用して見つけることができます。

シグナルによる終了を引き起こす128を超える値。したがって、シグナルによって終了したシェルコマンドがある場合、戻りステータスは(128+シグナル番号)でなければなりません。

例えば:

シェルコマンドがSIGINTで終了した場合、$?130(128 + 2)を返します(ここで2はSIGINTのシグナル番号です。kill -lを使用して確認してください)


0

実行可能ファイルが終了(終了)すると、実行可能ファイルを実行したシェルに値が返されます。exit(0)通常、すべてが順調であることをexit(1)示しますが、何かがおかしくなったことを示します。



0

exit(0) Program(Process)が正常に終了したことを意味します。

exit(1) プログラム(プロセス)が正常に終了しないことを意味します。

このことを観察したい場合は、UNIXでの信号処理とプロセス管理を知っている必要があります...

sigactionwatipid()..for()... such .... API ........... について知っている


0

exit function。Cプログラミング言語では、exit関数は、exitに登録されているすべての関数を呼び出し、プログラムを終了します。

exit(1)プログラム(プロセス)が異常終了したことを意味します。 ファイルバッファがフラッシュされ、ストリームが閉じられ、一時ファイルが削除されます

exit(0) Program(Process)が正常に終了したことを意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.