利用WTO从金属C中打印

利用WTO从金属C中打印,c,mainframe,zos,metalc,C,Mainframe,Zos,Metalc,我正试图使用世贸组织的指令,从金属C打印出“你好世界”到我的工作日志。这是基于z/OS V1R10.0 Metal C编程指南和参考资料第1.2.3.5节中的示例。当我使用WTO时,我的缓冲区包含0或ASCII到EBCDIC的转换出现问题。我在下面粘贴了我的工作日志的相关部分,后面是我的代码,然后是IBM示例中我无法编译的代码。 作业日志 09.01.56 J0686275 IEF403I IMIJWS0G-启动-时间=09.01.56 09.01.56 J0686275+…0。。。。。。。 0

我正试图使用世贸组织的指令,从金属C打印出“你好世界”到我的工作日志。这是基于z/OS V1R10.0 Metal C编程指南和参考资料第1.2.3.5节中的示例。当我使用WTO时,我的缓冲区包含0或ASCII到EBCDIC的转换出现问题。我在下面粘贴了我的工作日志的相关部分,后面是我的代码,然后是IBM示例中我无法编译的代码。 作业日志

09.01.56 J0686275 IEF403I IMIJWS0G-启动-时间=09.01.56 09.01.56 J0686275+…0。。。。。。。 09.01.56 J0686275----计时(分钟)---分页计数--- 09.01.56 J0686275-IMIJWS0G GO 00 6.00.00.00 1292 0 0 1 09.01.56 J0686275 IEF404I IMIJWS0G-结束-时间=09.01.56 我的代码

#include #include #include int main() { struct WTO_PARM { unsigned short len; unsigned short code; char* text; } wto_buff = { 4+11, 0, "hello world" }; __asm( " WTO MF=(E,(%0)) " : : "r"(&wto_buff)); } #包括 #包括 #包括 int main() { 世贸大厦{ 无符号短透镜; 无符号短码; 字符*文本; }wto_buff={4+11,0,“你好,世界”}; __asm(“WTO MF=(E,(%0)):“r”(&WTO_buff)); } IBM代码

int main() { struct WTO_PARM { unsigned short len; unsigned short code; char text[80]; } wto_buff = { 4+11, 0, "hello world" }; __asm( " WTO MF=(E,(%0)) " : : "r"(&wto_buff)); return 0; } int main(){ 世贸大厦{ 无符号短透镜; 无符号短码; 字符文本[80];}wto_buff={4+11,0,“你好,世界”};u asm(“wto MF=(E,(%0)):::“r”(&wto_buff)); 返回0; }
也许两个版本的结构在内存中的布局不一样?我在gcc中尝试过:

#include <stdio.h>

struct WTO_PARM {
    unsigned short len;
    unsigned short code;
    char *text;
};

int main()
{
    struct WTO_PARM moo = { 4+11,0,"hello" };
    printf("size %zu struct %p string %p\n", sizeof(struct WTO_PARM),&moo,moo.text);
    return 0;
}
但是,如果我将文本参数的类型更改为char[80],结果将更改为:

size 84 struct 0x22cc80 string 0x22cc84

WTO指令可能希望字符串被直接打包到该结构中。

为什么不能编译IBM示例?它对我来说很好-也许您可以向我们展示您的编译器参数和错误消息?

IBM示例对我来说很好(在Z/os 1.9下),但我必须添加 设置代码页的杂注: 在示例的顶部: #pragma文件标签(“IBM-500”) 编译器不接受字符文本[80]中的[and]; 我也尝试过将char文本[80]更改为char*文本,但得到了相同的结果
奇怪的结果。

您是否通过TN3270客户端编辑代码?问题很可能与仿真器中的代码页有关。例如,我需要在ISPF中进行以下更改:Cx'4A'x'AD'all(For[)和Cx'5A'x'BD'(For])以编译源代码…

这两个结构的“内存布局”是相同的-这是不同的结构。一个有一个指针(这个指针指向结构之外的某个地方),而另一个有一个数组(数组完全包含在函数、结构等中声明的地方)。
size 8 struct 0x22cce0 string 0x402000
size 84 struct 0x22cc80 string 0x22cc84