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