WEB开发网
开发学院操作系统Linux/Unix 原生 z/OS 和 zOS UNIX Systems Services 之间的编... 阅读

原生 z/OS 和 zOS UNIX Systems Services 之间的编程

 2008-11-26 08:14:40 来源:WEB开发网   
核心提示: 但是,如果 HLASM 程序是 LE 兼容的,原生 z/OS 和 zOS UNIX Systems Services 之间的编程(5),就不需要这个 #pragma 语句, 除此之外,但是,如果希望编写 64 位程序,定义和调用 HLASM 模块的过程与调用任何其他模块是一样的,问题和提示

但是,如果 HLASM 程序是 LE 兼容的,就不需要这个 #pragma 语句。

除此之外,定义和调用 HLASM 模块的过程与调用任何其他模块是一样的。

问题和提示

如果要编写需要在不同 UNIX 系统(包括 USS)上编译和运行的 C 代码,就需要使用 __MVS__ 宏。可以使用这个宏编写条件编译所需的 #ifdef 语句。清单 4 给出一个示例。

对于 USS 和原生 z/OS,默认的 C/C++ 编译器选项不一样。因此,要仔细检查将要使用的选项。

z/OS C/C++ 编译器还支持编写不在 Language Environment 中运行的 C 代码,这对于用 C 代码替换 HLASM 出口非常方便。在 z/OS 1.9 之前的 z/OS 版本中,这个特性称为 Systems Programming Facility(SPC),z/OS 1.9 及更高版本把它称为 Metal C。

注意,在使用这个特性时,只能使用一部分运行时库函数。在 IBM z/OS XL C/C++ Programming Guide (SPC)或 z/OS Metal C Programming Guide and Reference (C Metal)中可以找到更多信息。

除非指定 C 编译器 ASCII 选项,否则在 USS 中运行的所有 C 代码都是 EBCDIC(而其他所有 UNIX 系统都使用 ASCII),所以所有字符串常量都被当作 EBCDIC 对待。考虑到 USS 本身(包括 shell 命令输入和系统函数调用的结果)都采用 EBCDIC,所以这是有意义的。在编写 Java JNI 代码时,这一点尤其重要;需要把 Java 传递来的所有信息转换为 EBCDIC。

在创建对外提供函数或变量(包括 Java JNI 代码)的 DLL 时,必须导出函数或变量;这个操作不会默认完成。可以使用 #pragma export 指令或 C 编译器的 exportall 选项来完成。

在 z/OS 上进行编译时,UNIX C 程序员会遇到一个以前没有听到过的术语:XPLINK。Extra Performance Linkage(XPLINK)模块是以不同方式在调用者之间传递参数和信息的 z/OS 模块。它是 z/OS 的一个新特性,它比老式的原生 z/OS 链接快得多。但是,XPLINK 模块有一个大问题:一般情况下,不能从 XPLINK 程序调用非 XPLINK 程序,反过来也不行。要想这样做,就需要一个 HLASM “胶水” 模块。

另外,只对于 C 和 Java 应用程序支持 XPLINK(但是也可以编写 LE XPLINK HLASM 程序)。但是,如果希望编写 64 位程序,就没有选择了;必须使用 XPLINK。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:原生 OS zOS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接