MSGFILE についての考慮事項

z/OS® XL C/C++ では、エラー出力が MSGFILE に送られるか、stderr に送られるか、stdout に送られるかに応じて、エラー出力の種類が区別され ています。

表 1. z/OS XL C/C++ での出力先
出力先 メッセージの種類 作成元 デフォルトの出力先
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 を参照)
注 :
  1. z/OS UNIX シェルのいずれかを使用している場合は、stderr は、ファイル記述子 2 に割り当てられます。これは、通常端末です。z/OS Language Environment のメッセージ・ファイルについて詳しくは、Language Environment のメッセージ・ファイルの操作を参照してください。
  2. z/OS UNIX シェルのいずれかを使用している場合は、stdout は、ファイル記述子 1 に割り当てられます。これは、通常端末です。

すべての stderr 出力は、デフォルトでは MSGFILE の宛先に送信されますが、stdout 出力はその固有の宛先に送信されます。 stderrstdout にリダイレクトされる場合、その両方が stdout の宛先を共有します。 stdoutstderr にリダイレクトされる場合、その両方が stderr の宛先を共有します。

stdout のオープン検索順序で使用した DD の 1 つを、MSGFILE オプションの DD として指定した場合、stdout のオープン検索ではその DD は無視されます。

表 2は、リダイレクトが行われた後の stderr および stdout への出力の宛先を示しています。 stdoutstderr が共通の宛先を共用している場合、出力は常にインターリーブされます。デフォルトの場合には、stdoutstderr はリダイレクトされていません。

表 2. z/OS XL C/C++ のインターリーブされた出力
  stderr を リダイレクトしない場合 stderrstdout 以外の宛先に リダイレクトした場合 stdout にリダイレクトされた stderr
stdout をリダイレクトしない場合 stdout を自身へ、stderr を MSGFILE へ stdout を自身へ、stderr を自身の他の宛先へ 両方を stdout
stdoutstderr 以外の宛先に リダイレクトした場合 stdout を自身の他の宛先へ、stderr を MSGFILE へ stdout を自身の他の宛先へ、stderr を自 身の他の宛先へ 両方を新しい stdout の宛先へ
stderr にリダイレクトされた stdout 両方とも MSGFILE へ 両方を新しい stderr の宛先へ stdoutstderr へ、stderrstdout
z/OS XL C/C++ は、エラー出力を以下のように経路指定します。