从 ILE C (AS/400 C) 中的其他 c 程序调用 c 程序
call c program from other c program in ILE C (AS/400 C)
我需要从 AS/400 中的 c 程序调用已编译的 c 程序,通过引用传递参数。我首先尝试 as/400 中的这段代码应该调用一个程序:
#include <unistd.h>
int main(void) {
char *programName = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
execlp(programName, programName, arg1, arg2, NULL);
return 0;
}
在 linux 中有效,但 as400 无法识别“execlp”。
在 COBOL 中,我可以轻松调用 C 编译的程序,通过引用传递参数,这是我需要的,如下所示:
CALL "MYPROGRAM" USING BY REFERENCE ARG1, ARG2.
我想过使用 system(),但我无法通过引用传递变量。有什么想法吗?
使用#pragma
将程序名定义为大写并设置链接为OS
#include <decimal.h>
// -------------------- qcmdexc -------------------------------
#pragma map( qcmdexc, "QCMDEXC" )
#pragma linkage( qcmdexc, OS )
void qcmdexc( char[], decimal(15,5)) ;
decimal(15,5) x = 30d ;
char cmds[256] ;
// dlyjob 5 seconds
strcpy( cmds, "dlyjob dly(5) " ) ;
qcmdexc( cmds, x ) ;
您调用的程序是 C 程序应该无关紧要。所有 ILE 程序都具有相同的界面。
我需要从 AS/400 中的 c 程序调用已编译的 c 程序,通过引用传递参数。我首先尝试 as/400 中的这段代码应该调用一个程序:
#include <unistd.h>
int main(void) {
char *programName = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
execlp(programName, programName, arg1, arg2, NULL);
return 0;
}
在 linux 中有效,但 as400 无法识别“execlp”。
在 COBOL 中,我可以轻松调用 C 编译的程序,通过引用传递参数,这是我需要的,如下所示:
CALL "MYPROGRAM" USING BY REFERENCE ARG1, ARG2.
我想过使用 system(),但我无法通过引用传递变量。有什么想法吗?
使用#pragma
将程序名定义为大写并设置链接为OS
#include <decimal.h>
// -------------------- qcmdexc -------------------------------
#pragma map( qcmdexc, "QCMDEXC" )
#pragma linkage( qcmdexc, OS )
void qcmdexc( char[], decimal(15,5)) ;
decimal(15,5) x = 30d ;
char cmds[256] ;
// dlyjob 5 seconds
strcpy( cmds, "dlyjob dly(5) " ) ;
qcmdexc( cmds, x ) ;
您调用的程序是 C 程序应该无关紧要。所有 ILE 程序都具有相同的界面。