• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

400下c/c++程序咋调用400命令等

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 23次 | 进入软件测试论坛讨论

领测软件测试网
[color=red:4d96a89aa7]400下c/c++程序咋调用cl/as400 command 等[/color:4d96a89aa7][size=24:4d96a89aa7][/size:4d96a89aa7]

 qingzhou 回复于:2005-08-24 18:03:48
在RPGIV中调用CL命令是采用应用程序接口API:QCMDEXC来实现,如下例,编译完RPGIV后在命令行CALL一下,就会执行WRKSPLF等效的功能。
C、C++语句在大学时有接触过,不过都快忘记了, :oops: 现在自己也没有使用过C语言在OS/400平台上开发,用RPGIV+CL会多些。看看C、C++是否也有类似的API接口提供调用,或者是否也是使用API:QCMDEXC来实现。
[b:328292f46c]LIU/QRPGLESRC(QCMDEXC1)[/b:328292f46c]
[code:1:328292f46c]
     **
     D Cmd             S            300    INZ('WRKSPLF')
     D CmdLen          S             15  5
     **
     C                   EVAL      CmdLen=%LEN(%TRIMR(Cmd))
     **
     C                   CALL      'QCMDEXC'
     C                   PARM                    Cmd
     C                   PARM                    CmdLen
     **
     **
     C                   EVAL      *INLR=*ON
     C                   RETURN
     **
[/code:1:328292f46c]

 ===> CALL QCMDEXC1 

[code:1:328292f46c]
                              使用所有假脱机文件                                
                                                                                
 输入选项,按“执行”键。                                                       
   1= 发送   2= 更改   3= 挂起   4= 删除   5= 显示   6= 释放   7= 信息          
   8= 属性   9= 使用打印状态                                                    
                                                                                
                                                                                
                               设备或                        总       Cur       
 Opt   文件        用户        队列        用户数据   Sts    页数    Page  Cpy  
      MIPOCP      LIU         TRFSCN                  RDY       8            1  
      MIPOCL1     LIU         TRFSCN                  RDY       3            1  
      MIRPHP      LIU         TRFSCN                  RDY       8            1  
      MIRPHL1     LIU         TRFSCN                  RDY       3            1  
      MIRSHL1S    LIU         TRFSCN                  RDY       3            1  
      MIRSHL2     LIU         TRFSCN                  RDY       3            1  
      MI020P      LIU         TRFSCN                  RDY       8            1  
      MI020P1     LIU         TRFSCN                  RDY       8            1  
      MI021L1     LIU         TRFSCN                  RDY       3            1  
                                                                       尚有 ... 
 选项 1, 2, 3 或命令的参数                                                      
 ===>                                                                           
 F3= 退出   F10= 视图 4   F11= 视图 2   F12= 取消   F22= 打印机   F24= 其余键   
                                                                                
                                                                                
[/code:1:328292f46c]

 layyf 回复于:2005-08-25 11:18:10
system()

 qingzhou 回复于:2005-08-25 11:58:52
[quote:567c758ce4="layyf"]system()[/quote:567c758ce4]
能说明清楚一点吗?

 span1024 回复于:2005-08-25 15:53:04
system(cmd) -- cmd 指定你要调用的程序/命令串就可以了,某种程度上来说,比CL或RPG里调用呀方便一些,因为不需要指出命令串的长度.

下面是一个简单的说明:

#define CMD_SBMJOB "SBMJOB CMD( CALL TRS001 ('%S') ) JOBD(%s/%s) JOB(%s)" 


char cmd[200];

sprintf(cmd, CMD_SBMJOB, In_ID, jd_Lib, jd_Nam, rj_Nam); 

system(cmd);

 span1024 回复于:2005-08-25 15:55:15
当然在C语言中也可以象 "qingzhou" 说的那样,通过使用系统API:QCMDEXC()来做.

 qingzhou 回复于:2005-08-25 16:00:05
[quote:70e76fe2ff="span1024"]
sprintf(cmd, CMD_SBMJOB, In_ID, jd_Lib, jd_Nam, rj_Nam); 

system(cmd);[/quote:70e76fe2ff]

很好。。。 :em02:

设为精彩帖子备用,日后有需要的朋友可以参考。

 wjywhl 回复于:2005-08-30 19:41:16
1、先用预处理命令将rpg程序映射成C/C++API。
2、直接调用映射后的api即可

我在400上用C/C++作过实际项目的

 Eagle_wolf 回复于:2005-08-31 18:29:15
400 提供了很多类unix的api 
system 就是一个
其他如sleep usleep 等等

 yoyoage 回复于:2005-08-31 21:54:51
[quote:5ebbcbd92b="wjywhl"]1、先用预处理命令将rpg程序映射成C/C++API。
2、直接调用映射后的api即可

我在400上用C/C++作过实际项目的[/quote:5ebbcbd92b]

怎么把rpg程序映射成c/c++ 的api?可不可以详细点解释一下?谢谢先。

 qingzhou 回复于:2005-08-31 22:22:31
[quote:3d86bec3f9="yoyoage"]
怎么把rpg程序映射成c/c++ 的api?可不可以详细点解释一下?谢谢先。[/quote:3d86bec3f9]
c++中为什么会引入const ?
  c++的提出者当初是基于什么样的目的引入(或者说保留)const关键字呢?,这是一个有趣又有益的话题,对理解const很有帮助。 

1. 大家知道,c++有一个类型严格的编译系统,这使得c++程序的错误在编译阶段即可发现许多,从而使得出错率大为减少,因此,也成为了c++与c相比,有着突出优点的一个方面。 

2. c中很常见的预处理指令 #define variablename variablevalue 可以很方便地进行值替代,这种值替代至少在三个方面优点突出: 

  一是避免了意义模糊的数字出现,使得程序语义流畅清晰,如下例: 
  #define user_num_max 107 这样就避免了直接使用107带来的困惑。 

  二是可以很方便地进行参数的调整与修改,如上例,当人数由107变为201时,进改动此处即可, 

  三是提高了程序的执行效率,由于使用了预编译器进行值替代,并不需要为这些常量分配存储空间,所以执行的效率较高。 

  鉴于以上的优点,这种预定义指令的使用在程序中随处可见。 

3. 说到这里,大家可能会迷惑上述的1点、2点与const有什么关系呢?,好,请接着向下看来: 

。。。。。。

具体可以参考如下帖子::mrgreen: 
http://bbs.chinaunix.net/forum/viewtopic.php?t=143183&start=0&sid=df265c717e3a1b0487b178e98b056402

 wjywhl 回复于:2005-09-10 19:06:53
http://www-1.ibm.com/support/docview.wss?uid=csc10a51294c5b22e6f648256f3900080d9f

 wjywhl 回复于:2005-09-10 19:07:49
http://www-1.ibm.com/support/docview.wss?uid=csc10a51294c5b22e6f648256f3900080d9f

 wjywhl 回复于:2005-09-12 22:51:45
大家提到的system或者*exec()的函数,
不但性能低,而且根本没办法让c程序处理rpg程序返回参数。

映射成c api方式,才是万能的方法。

在c程序预处理段如下声明即可:
#pragma linkage(pgmrpg, os, nowiden)

.....
main()
{
    ....
    pgmrpg(parm1, parm2,rtncod);
   ....
 }

建议所有的传入参数最好采用字符指针,约定长度。
另外,c程序取rpg程序参数时,用memcpy函数拷贝。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网