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

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

 2008-11-26 08:14:40 来源:WEB开发网   
核心提示: 从 C 访问 z/OS 功能无论是在 USS 还是原生 z/OS 中运行,C 程序都可以使用标准的 C 函数访问许多 z/OS 功能,原生 z/OS 和 zOS UNIX Systems Services 之间的编程(3),例如,C 函数 sleep() 大致相当于 HLASM 宏 STI

从 C 访问 z/OS 功能

无论是在 USS 还是原生 z/OS 中运行,C 程序都可以使用标准的 C 函数访问许多 z/OS 功能。例如,C 函数 sleep() 大致相当于 HLASM 宏 STIMER。C 编译器还提供一些 z/OS 特有的函数,比如 __cabend()(它与 HLASM ABEND 宏相同)。所有 C/C++ 函数都在 z/OS XL C/C++ Run-Time Library Reference 中有文档说明。

值得注意的一点是,可以从不在 USS 中运行的程序调用 USS 服务(比如 getpid() 和 fork())。在这种情况下,会自动 “标记” 地址空间,对于 USS 内核而言,这种奇特的方式使它看起来像一个进程。

如果需要访问 z/OS 控制块,那么在原生 z/OS 和 USS 中都可以用 C 代码来完成。坏消息是 IBM® 没有提供映射这些控制块所需的 C 头文件。但是,也有好消息:C 编译器还附带一个 DSECT 转换实用程序,它可以把 HLASM DSECT 转换为 C 声明。清单 2 中的代码示例从 z/OS Extended CVT 控制块生成 z/OS Sysplex Name。

清单 2. 访问 z/OS 控制块的 C 代码示例

/* ----------------------------------------------------------- 
    Map z/OS Control Block Structures                
    ---------------------------------------------------------- */
  /* --- Cut down PSA Structure - just PSACVT to find our CVT - */
  struct psa {                            
    int psastuff[4];        /* 4 bytes before CVT Ptr */ 
    struct cvt *psacvt;   
    /* Ignore the rest of the PSA */   
  };
    
  /* --- Cut down CVT Structure - just CVTECVT to find ECVT --- */
  struct cvt {  
    char cvtstuff[140];       /* 140 bytes before ptr  */
    struct ecvt *cvtecvt;      /* Ptr to ECVT       */
    /* Ignore the rest of the CVT */ 
  };
             
  /* --- Cut down ECVT Structure - just ECVTSPLX to get Sysplex */
  struct ecvt {      
    char ecvtecvt[8];        /* 8 Bytes before Sysplex */
    char ecvtsplx[8];        /* Sysplex Name      */
    /* Ignore the rest of the ECVT */  
  }; 
       
  /* ----------------------------------------------------------- 
    Variables      
    ---------------------------------------------------------- */
  struct psa *psa_ptr = 0;      /* PSA starts at address 0 */
  char sysplex[10];   
           
  /* ----------------------------------------------------------- 
    Put our Sysplex name into the sysplex variable     
    ---------------------------------------------------------- */
  strncpy(sysplex,psa_ptr->psacvt->cvtecvt->ecvtsplx,8);   

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

Tags:原生 OS zOS

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