z/OS® XL C/C++ では、エラー出力が MSGFILE に送られるか、stderr に送られるか、stdout に送られるかに応じて、エラー出力の種類が区別され ています。
| 出力先 | メッセージの種類 | 作成元 | デフォルトの出力先 |
|---|---|---|---|
| MSGFILE の出力 | z/OS Language Environment® のメッセージ (CEExxxx) | z/OS Language Environment 条件 | MSGFILE ddname |
| z/OS XL C/C++ 言語のメッセージ (EDCxxxx) | z/OS XL C/C++ の未処理条件 | MSGFILE ddname | |
| stderr メッセージ | perror() メッセージ (EDCxxxx) | 例えば、perror() の呼び出しから出される | MSGFILE ddname (注 1 を参照) |
| 明示的に stderr に送られるユーザー出力 | fprintf() の呼び出しから出される | MSGFILE ddname | |
| stdout メッセージ | 明示的に stdout に送られるユーザー出力 | 例えば、printf() の呼び出しから出される | stdout (注 2 を参照) |
| 注 :
|
|||
すべての stderr 出力は、デフォルトでは MSGFILE の宛先に送信されますが、stdout 出力はその固有の宛先に送信されます。 stderr が stdout にリダイレクトされる場合、その両方が stdout の宛先を共有します。 stdout が stderr にリダイレクトされる場合、その両方が stderr の宛先を共有します。
stdout のオープン検索順序で使用した DD の 1 つを、MSGFILE オプションの DD として指定した場合、stdout のオープン検索ではその DD は無視されます。
表 2は、リダイレクトが行われた後の stderr および stdout への出力の宛先を示しています。 stdout と stderr が共通の宛先を共用している場合、出力は常にインターリーブされます。デフォルトの場合には、stdout と stderr はリダイレクトされていません。
| stderr を リダイレクトしない場合 | stderr を stdout 以外の宛先に リダイレクトした場合 | stdout にリダイレクトされた stderr | |
|---|---|---|---|
| stdout をリダイレクトしない場合 | stdout を自身へ、stderr を MSGFILE へ | stdout を自身へ、stderr を自身の他の宛先へ | 両方を stdout へ |
| stdout を stderr 以外の宛先に リダイレクトした場合 | stdout を自身の他の宛先へ、stderr を MSGFILE へ | stdout を自身の他の宛先へ、stderr を自 身の他の宛先へ | 両方を新しい stdout の宛先へ |
| stderr にリダイレクトされた stdout | 両方とも MSGFILE へ | 両方を新しい stderr の宛先へ | stdout を stderr へ、stderr を stdout へ |
デフォルトでは、z/OS XL C/C++ は、すべての stderr 出力を MSGFILE 宛先に送信し、stdout 出力をその独自の宛先に送信します。 この動作は、z/OS XL C/C++ のリダイレクトを使用して変更できます。これにより stdout および stderr を、DD 名、ファイル名、または相互にリダイレクトできます。 stderr をリダイレクトしていない場合には、必ず MSGFILE の宛先が使用されます。 stderr を stdout にリダイレクトすると、stderr および stdout は、stdout の宛先を共有します。 stdout を stderr にリダイレクトすると、それらは stderr の宛先を共有します。