是否可以获取程序调用的路径?我这样调用z/Os上的程序调用'MCOE.XXXXXXXX.C.LOAD(args)'你好'
我的意图是在调用的程序中获取MCOE.XXXXXXXX.C.LOAD数据集,而不将此路径指定为参数。谢谢PetrS
这是一个不平凡的练习,但通常可以完成。
首先,您可以使用CSVINFO来获取有关您的程序的一些信息,然后诀窍是模拟z/OS为查找您的模块所做的搜索。。。private/task库、STEPLIB/JOBLIB、(M)LPA搜索、LNKLST等-一旦您明确地知道加载模块名称(您的"args"程序名称可能是别名,或者是调用方使用IDENTITY宏设置的名称),假设您知道要使用哪个DCB,则可以使用BLDL获得大量信息。
一旦你计算出DDNAME和连接号(毕竟,STEPLIB中可能有10个库!),你就可以扫描分配数据结构来获得实际的数据集名称。通常,这是通过遍历内存中的数据结构来完成的(PSATOLD->TCBTIO,然后索引到TIOT中,直到找到所需的条目……匹配的TIOT条目将有一个指向JFCB的指针,或者一个SWA管理器令牌,您可以使用它来获取JFCB,JFCB具有数据集名称和您想要的所有其他详细信息)。
在从LNKLST提取数据的情况下,您需要额外的工作来准确地确定从LNKLST级联中的哪个数据集提取数据。同样,这是可能的,但需要一些技巧。
如果您的程序恰好位于(M)LPA中,我不确定您是否能够可靠地检索它从中提取的原始数据集名称——这可能是最糟糕的情况,尽管毫无疑问还有其他各种潜在的挑战,例如处理UNIX服务可执行路径名。
如果你决定试一试,祝你好运!