【问题标题】:C++ IBM i Access API Running remote commands and getting outputC++ IBM i Access API 运行远程命令并获取输出
【发布时间】:2015-10-25 06:44:44
【问题描述】:

IBM i Access API for C++ 允许您运行服务器命令,例如(DSPSYSSTS 显示系统状态):

cwbSV_ErrHandle msgHandle; //Error Handle
cwbSV_CreateErrHandle(&msgHandle); //Create Error Handle
int code = cwbRC_RunCmd(SystemData::hxSystem, "DSPSYSSTS", msgHandle); //Run command

//Command ran successfully
if(code == CBW_OK){
   int code = cwbSV_GetErrText(msgHandle, returnTxt, 1024, NULL);
   //code value is CWBSV_NO_ERROR_MESSAGES
}

我可以检索命令运行后服务器抛出的错误消息。但是如何检索命令输出?如果我运行“DSP”(显示)命令,我显然想要得到输出显示。

【问题讨论】:

  • 如果通过 cwbRC_RunCmd() 运行,DSPSYSSTS 应该创建假脱机输出。从技术上讲,它可以被检索,但Retrieve System Status (QWCRSSTS) API 旨在用于程序访问此类数据。 SSTS0100、SSTS0200 和 SSTS0300 格式一起将返回所有 DSPSYSSTS 数据。

标签: c++ command ibm-midrange


【解决方案1】:

根据定义,DSP 类型命令将其输出发送到 5250 数据流,然后由 5250 仿真器解释,以便正确绘制显示。它根本不像标准输出,这意味着截取用于显示的输出将需要相当多的工作。

传统的答案是使用 API,它以旨在由程序读取的形式返回信息。在系统状态的情况下,这可能是Retrieve System Status (QWCRSSTS) API。让您自己轻松完成此操作的一种方法是编写一个存储过程并调用它,而不是直接从客户端调用 API。

另一个替代方法是 DSPSYSSTS OUTPUT(*PRINT),然后读取假脱机文件。它比原始 5250 输出更容易解析,但它可以并且确实在版本之间发生变化,因此 API 是一个更一致的接口。

如果您真的想从 DSPSYSSTS 中筛选输出,则需要了解 5250 协议,该协议非常复杂,我认为无法在这样的论坛中进行解释。另一方面,Albert York 编写了一个名为 TNAPI 的程序,它可能满足您的需求。

【讨论】:

  • 有趣的信息。你试过“TNAPI”吗?我在哪里可以获得示例?这似乎是我需要的。我需要在 IBM i 中安装一个 RPG 程序,对吗?谢谢。
  • 我没有使用过 TNAPI。如果我遇到这个问题,我可能会编写一个存储过程来调用 API 并返回我正在寻找的特定信息。
【解决方案2】:

使用Scott Klement explaningRetrieve System Status (QWCRSSTS) API 转换为C++ 代码。这样你就完全不需要rpg了。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多