2

ログの目的で SYSUID と JOBID を COBOL プログラムに渡す必要があります。これはどのように可能ですか?

JCL でクエリの入力として同じものを渡すことができます。

前もって感謝します。

4

3 に答える 3

6

SYSUID は単純で、 EXECステートメントのPARMパラメータに追加するだけです。

//ASTEP EXEC PGM=A#PGM,PARM='&SYSUID'

JOBID はパラメーターとして使用できません。必要に応じて、z/OS制御ブロックを介して連鎖する COBOL コードを作成する必要があります (そのリンクにあるデータ域の本を参照してください)。これは実行できますが、お勧めしません。

実際にジョブ番号を取得したい場合は、相対メモリ位置 0 にある PSA 制御ブロックに移動するコードを記述します。そこから、PSA の PSATOLD フィールドにある現在の TCB へのポインタを取得します。 TCB から JSCB へのポインターである TCBJSCBB フィールドを取得し、JSCB の TCBJSCBB フィールドから、ジョブ番号である SSIBJBID フィールドを含む SSIB へのポインターを取得します。これらの制御ブロック、PSA、TCB、JSCB、および SSIB はすべて、上記のリンクで文書化されています (z/OS 2.4 の場合)。そして、これを行うことはお勧めしません。

z/OS 制御ブロックの連鎖に関するチュートリアルが、Longpela から2 つ のパートに分かれています。

于 2012-04-26T11:57:13.400 に答える
3

@cschneidに同意します。ジョブ番号を取得するためだけに、すべてのポインターチェーンを実行したくないということです。しかしもちろん、私たちは「バナーページ印刷」プログラムを作成しているときにそれを行いました。http://gsf-soft.com/Freeware/COB2JOB.shtmlのコードに基づいています。

于 2012-04-26T21:31:32.027 に答える
1

LINKAGE SECTION での SET ADDRESS OF 項目、REDEFINE-ing POINTER および COMP-5 項目の使用、およびアセンブラー DSECT からの 01 レベルの構造体の作成に慣れている場合は、ぜひ使用してください。軽量の COBOL サブルーチンとして、アセンブラー ルーチンよりオーバーヘッドはそれほど多くありません (ただし、アセンブラーの方が優れています)。REXX STORAGE 機能に慣れている場合は、Dave Alcock の IPLINFO プログラムを見ることができます。

ただし、私が言及した COBOL 言語構造が不明な場合は、アセンブラー サブルーチンを作成するか、誰かに作成を依頼してください。

于 2012-04-27T04:01:43.030 に答える