2

我需要将 SYSUID 和 JOBID 传递给 cobol 程序以进行记录,这怎么可能?

可以作为 JCL 中查询的输入传递。

提前致谢。

4

3 回答 3

6

SYSUID 很简单,只需将其添加到EXEC语句的PARM参数中即可。

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

JOBID 不能作为参数使用。如果需要,您将不得不编写 COBOL 代码来链接 z/OS控制块(请参阅该链接中的数据区书籍)。这可以做到,但我不建议这样做。

如果你真的想得到作业编号,你可以编写代码去到 PSA 控制块,它位于相对内存位置 0。从那里你得到一个指向当前 TCB 的指针,它位于 PSA 的 PSATOLD 字段中,从TCB 你得到 TCBJSCBB 字段,它是一个指向 JSCB 的指针,从 JSCB 中的 TCBJSCBB 字段你得到一个指向 SSIB 的指针,它包含 SSIBJBID 字段,它是作业号。所有这些控制块 PSA、TCB、JSCB 和 SSIB 都记录在上面的链接中(对于 z/OS 2.4)。我重申我不建议这样做。

Longpela有一个关于通过 z/OS 控制块链接的教程,分为两 部分

于 2012-04-26T11:57:13.400 回答
3

我同意@cschneid 的观点,即您不想为了获得工作编号而进行所有的指针链接。当然,我们在创建“横幅页面打印”程序时确实这样做了。我们基于http://gsf-soft.com/Freeware/COB2JOB.shtml上的代码。

于 2012-04-26T21:31:32.027 回答
1

如果您对在 LINKAGE SECTION、REDEFINE-ing POINTER 和 COMP-5 项目中使用 SET ADDRESS OF 项目感到满意,以及从汇编程序 DSECT 创建 01 级结构,那么一定要这样做。作为一个轻量级的 COBOL 子例程,它的开销并不比汇编例程多多少(但汇编器更好)。如果您对 REXX STORAGE 功能感到满意,可以查看 Dave Alcock 的 IPLINFO 程序。

However, if the COBOL language constructs I mentioned are unknown to you, then write an assembler subroutine, or ask someone to write it.

于 2012-04-27T04:01:43.030 回答