2016-06-24 6 views
1

のように、各行が特定の形式に従うと予想されるファイル(またはstdin)を1行ずつ読み込むUnixコマンドfooを考えてみましょう。Unixプログラムの終了ステータス規約

いずれかの行が間違っていても(すべてではありません)、終了ステータスがEXIT_SUCCESSまたはEXIT_FAILUREである必要がありますか?私は標準を参照しようとしている

C11 Standard: 7.20.4.3

exit機能
パラ5

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

上記の解釈では、「実装定義」とは、その決定が実装者に委ねられていることを意味します。この解釈は正しいのでしょうか?

+2

C標準から派生したものから英語に翻訳されたもの:implementation = compiler、implementation-defined =コンパイラ固有の動作(システム固有の動作に依存する可能性があります) C標準のすべては、エンド・ユーザー/アプリケーション・プログラマーではなく、コンパイラーの作成者に対処するように書かれています。 – Lundin

+0

明らかに、ジンボの様々なもの(Wikipedia)のエンポリアムからの引用:[Exit Status](https://en.wikipedia.org/wiki/Exit_status) –

答えて

1

C標準で定義されている実装は、プラットフォームの実装を意味し、ではなく、個々のアプリケーションのプログラマであるです。

この文が意味することは、さまざまなプラットフォームが、環境への成功や失敗の伝達方法(シェルなど)に異なる慣習を持つ可能性があるということです。実装は、それにつながる理由に応じて、異なるコードを区別するための手段を提供することもできます。しかし、そのようなコードは異なるシステム間で移植可能ではないかもしれません。

プログラマが成功または失敗とみなすセマンティクスについては、アプリケーションに適したものを自由に実行することができます。

1

決定者が実装者に任せられていることは間違いありません。プログラムの使用方法によって異なります。例えば

それが正しくフォーマット入力に遭遇した場合、fooが失敗して終了した場合、fooの利用者は、その終了ステータスをチェックし、stderrの内容を含む電子メールで彼女を警告するシェルスクリプトを書くことができます。 fooが正常終了した場合は、電子メールを送信する必要はありません。

関連する問題