10.2DD文定義情報を得る(DEVTYPEとRDJFCB)

By 神居 - Posted: 2009/11/25 Last updated: 2009/11/25 - Leave a Comment

プログラムを実行するには、JCLを作成し、使用するデータセットに対応したDD文を定義します。DD文にどのようなパラメーターが定義されているかによってプログラムの動きを変えたり、アクセスするデータセットの情報を得たりすることは、しばしば行われます。
JCLとプログラムを分離することによって、アクセスするデータセットやデバイスを固定化させない仕組みになっているのがMVSの特長ですが、アプリケーションの実行結果のサマリー出力などに、実際にどのデータセットにアクセスしたのか、なども表示できるようになります。


データセットの装置タイプを得る、DD文が定義されているかを確認する

DEVTYPEマクロを発行することで、DD文に定義したデータセットの装置タイプを得ることができます。これを利用すれば、特定の装置タイプしかサポートしないプログラムは、OPEN前に定義されたデバイス種別を知ることができます。また指定した名前に対応するDD文が定義されていなければ、DEVTYPEはエラーを返すので、未定義のDD文に対応したデータセットをOPENしないようにすることができます。未定義のDD名でOPENしてもエラーが返るだけですが、OPENの場合は次のメッセージがコンソールに出てしまいます。DEVTYPEで事前に確認すれば、メッセージが発行されることを抑止できます。
IEC130I ddname DD STATEMENT MISSING
※サンプルではエラーを0か0以外かで判定してますが、実際のエラーコードは細分化されています(マニュアルを参照)。

DEVTYPEが返す情報は、マクロのパラメーターによって変わります。サンプルは最もシンプルなパターンです。DEVINFOエリアには8バイトの情報が返りますが、先頭の4バイトはUCBの装置タイプバイト(UCBTBYT1?UCBTBYT4)です。IEFUCBOBマッピング・マクロで参照可能です。その他DEVTYPEの詳細は「z/OS DFSMSdfp 拡張サービス」「システムプログラミング手引書 データ管理編」「システムプログラマの手引-マクロ編-」の各マニュアルに記載されています。


DD文に定義したパラメーター情報を得る

MVSでは(特にバッチプログラムでは)、データセットはDD名によってアクセスするのが基本です。データセットの名前などを知る必要はありません。しかしどのようなデータセットにアクセスするのかを求めたい場合もあります。このような場合はRDJFCBマクロを利用できます。DD文に定義されたパラメーターはJFCBと呼ばれるコントロール・ブロックに格納されています。
サンプルでは、アクセスするデータセットのDSNと先頭のVOLUME名を求めています。JFCBは基本的にDD文に定義されたパラメーターに基づき設定されているので、スペース情報(1次量、2次量他)などは、指定がなければ設定されていません。それらはJFCBではなくDSCBを求めて得ることができます。ただしカタログされているボリューム名や一時的データセットのDSNなどは設定されています。DD文のパラメーターをいろいろと変えて、試してみて下さい。なおRDJFCBはOPEN前、後どちらでも発行できます。OPEN後に発行した場合、RECFMなど1部のDCB情報はJFCBにも設定されます。
読み込んだJFCBは、IEFJFCBNマッピング・マクロで参照します。RDJFCBマクロもDEVTYPEと同じマニュアルに記載されています。

Posted in .基礎編 • • Top Of Page