gpt4 book ai didi

ibm-midrange - 从 CL 程序调用 GRTOBJAUT 时参数 OBJ 被切断

转载 作者:行者123 更新时间:2023-12-04 05:14:30 25 4
gpt4 key购买 nike

我制作了一个 CL 程序来简化更改对象的所有者、USRPRF 和权限。它利用 GRTOBJAUT 等进行更改。这是参数定义:

         pgm        parm(&libobj &type &owner &usrprfown &user1 &auth1 +
&user2 &auth2 &user3 &auth3)
...
dcl var(&libobj) type(*char) len(21)
dcl var(&type) type(*char) len(10)
dcl var(&user1) type(*char) len(10)
dcl var(&auth1) type(*char) len(10)
...

这就是我对 GRTOBJAUT 的称呼:

         grtobjaut  obj(&libobj) objtype(*all) user(&user1) +
aut(&auth1)

但是,实际上只有 &libobj 的前 10 个字符被传递给 GRTOBJAUT。我已经在调试器中验证了通过 MYLIB/TEST1234 导致 grtobjaut obj('MYLIB/TEST'),尽管 &libobj 包含完整的字符串。根据documentation这应该是 GRTOBJAUT 命令的正确语法,因此允许超过 10 个字符的长路径。事实并非如此吗?交互式 GRTOBJAUT 和 CL GRTOBJAUT 之间有区别吗?我该如何进行这项工作?

该程序针对 v6.1 编译并在支持 v7.1 的环境中运行。

编辑:同样的问题适用于 CHGOBJOWN。

最佳答案

您不能在单个参数中同时传递库和对象名称。 GRTOBJAUT OBJ() 参数有两个部分,而不仅仅是一个。您只定义一个部分,并声明它有 21 个字符长。但事实并非如此。它分为两部分,每部分十个字符。

一般来说,您应该这样更改您的 CL:

 pgm        parm(&lib &obj &type &owner &usrprfown &user1 &auth1 +
&user2 &auth2 &user3 &auth3)
...
dcl var(&lib) type(*char) len(10)
dcl var(&obj) type(*char) len(10)

库和对象名称作为单独的 10 个字符的名称传入。那么 GRTOBJAUT 命令将是这样的:

 grtobjaut  obj(&lib/&obj) objtype(*all) user(&user1) +
aut(&auth1)

请注意,OBJ() 参数分别指定了这两个部分。

如果您愿意,可以保留 21 个字符的 CL 参数。但是,如果这样做,您将必须向 CL 添加代码以解析该参数值并提取库和对象名称,然后再将它们传递到 GRTOBJAUT。将它们分别传递到您的 CL 中会更简单。

将它们分开后,您需要确保 GRTOBJAUT 接收到 &lib 时它不为空。如果它作为空白值进入您的 CL,您需要分配一个特殊值,例如“*LIBL”、“*CURLIB”或任何合适的值,以便 GRTOBJAUT 可以处理它。

有替代方案,但在尝试本质上是“技巧”的事情之前,您应该了解此要求。

关于ibm-midrange - 从 CL 程序调用 GRTOBJAUT 时参数 OBJ 被切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com