使用 IEFs-s-rEQ 宏的 MVS JES2 清除作业
Posted
技术标签:
【中文标题】使用 IEFs-s-rEQ 宏的 MVS JES2 清除作业【英文标题】:MVS JES2 purge job with IEFs-s-rEQ macro 【发布时间】:2018-07-25 07:18:41 【问题描述】:我想通过使用 IEFs-s-rEQ 宏向 JES2 请求操作来清除/取消/旋转作业。一切似乎都运行良好,但没有工作受到请求的影响。我认为这是 SSJM 结构中的过滤器问题,但是当我在过滤器中没有指定任何内容时,我没有错误(根据文档,我应该有一个错误)并且也没有工作受到影响。
这是我的代码:
char *pcJobId = "JOB03101";
int iRc;
char * __ptr32 pworkArea = __malloc31(60);
memset(pworkArea, 0, 60);
struct ssib * __ptr32 pSSIB = __malloc31(sizeof(struct ssib));
struct ssob * __ptr32 pSSOB = __malloc31(sizeof(struct ssob));
struct ssjm * __ptr32 pSSJM = __malloc31(sizeof(struct ssjm));
memset(pSSIB, 0, sizeof(struct ssib));
memcpy(pSSIB->ssibid, "SSIB", 4);
pSSIB->ssiblen = SSIBSIZE;
memcpy(pSSIB->ssibssnm, "JES2", 4);
memset(pSSJM, 0, sizeof(struct ssjm));
memcpy(pSSJM->ssjmeye, "SSJMPL ", 8);
pSSJM->ssjmlen = SSJMSIZE;
pSSJM->ssjmvrm = SSJMVRM1;
pSSJM->ssjmopt1 = SSJMPSYN;
pSSJM->ssjmreqp._ssjmtype = SSJMPRG;
pSSJM->ssjmsel1 = SSJMSOJI;
memcpy(pSSJM->ssjmojbi, pcJobId, 8);
memset(pSSOB, 0, sizeof(struct ssob));
memcpy(pSSOB->ssobid, "SSOB", 4);
pSSOB->ssoblen = SSOBHSIZ;
pSSOB->ssobfunc = (short int)85;
pSSOB->ssobssib = pSSIB;
pSSOB->ssobindv = (int)pSSJM;
void * __ptr32 * pParmList = __malloc31(4);
*pParmList = (void * __ptr32) ((int32_t)pSSOB | (int32_t)0x80000000); // the high-order bit must be on
iRc = 0;
__asm(" SAM31\n"
" SYSSTATE AMODE64=NO\n"
" IEFs-s-rEQ\n"
" SYSSTATE AMODE64=YES\n"
" SAM64\n"
: "=XL:NR:r15"(iRc)
: "XL:NR:r1"(pParmList), "XL:NR:r13"(pworkArea)
: "r0", "r1", "r13", "r14", "r15");
printf("IEFs-s-rEQ rc=%d\n", iRc);
printf("ssobretn=%d\n", pSSOB->ssobretn);
printf("ssjmretn=%d\n", pSSJM->ssjmretn);
printf("ssjmret2=%d\n", pSSJM->ssjmret2);
printf("ssjmnsjf=%d\n", pSSJM->ssjmnsjf);
printf("ssjmsjf8=%p\n", pSSJM->ssjmsjf8);
free(pworkArea);
free(pSSOB);
free(pParmList);
free(pSSJM);
根据文档,我在 SSJMSJF8 指针中获得受请求影响的每个作业的反馈,SSJMNSJF 应该是我得到的反馈数,这也是受请求影响的作业数。
我的代码打印这个:
IEFs-s-rEQ rc=0
ssobretn=0
ssjmretn=0
ssjmret2=0
ssjmnsjf=0
ssjmsjf8=0
这是我谈到的文档的链接。我正在使用修改作业功能调用(编号 85),这是第 460 页。
https://www-304.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3SA380679/$file/ieaf200_v2r3.pdf
【问题讨论】:
【参考方案1】:我看不到明显的东西。我试图让你的代码在我们的系统上运行,但我的 C 语言不够好,很遗憾无法完成上面未显示的内容。
另外,我试图让它在普通的汇编程序中运行。我得到和你一样的结果。我尝试了 PURGE 和 CANCEL 请求。一切似乎都没有做任何事情。但是,当指定一个无效的 jobid 时,IEFs-s-rEQ 会抱怨相应的返回码,所以我知道 IEFSREQ 被正确调用。一定是什么蠢事。
很抱歉,目前无法提供更多帮助
【讨论】:
我在找RACF的消息,冷没找到,所以我认为问题与权限不足无关。毕竟,所有返回码都是零,表示调用成功。但是,事实证明,您需要按照手册中的说明在 JESJOBS 类中设置配置文件。一旦我获得了适当的权限,取消请求就成功了,并且返回了预期的 SSJF 元素数量。 我认为它也可能是这样,但没有测试它。非常感谢您的帮助和时间,您真的帮助了我!以上是关于使用 IEFs-s-rEQ 宏的 MVS JES2 清除作业的主要内容,如果未能解决你的问题,请参考以下文章
应该使用啥代码页/字符集将来自 MVS 系统的数据解释为 Java 环境?