C/400 から iSeries400のコマンドを実行するには system 関数を使う。
直接、system 関数に固定値を記述してもよいし、変数を用意して動的なコマンドの実行を指示することもできる。
system関数は C言語だけでなく Perl の場合にも使用できるので覚えておくと良い。
次に例を示す。
0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00
0005.00 #define TRUE 0
0006.00 #define FALSE -1
0007.00
0008.00 void main(void){
0009.00 char command[128];
0010.00 char mylib[11];
0011.00
0012.00 system("DSPLIBL *PRINT");
0013.00
0014.00 memset(mylib, 0, sizeof(mylib));
0015.00 strcpy(mylib, "QTEMP");
0016.00 sprintf(command, "DSPLIB LIB('%s') *PRINT", mylib);
0017.00 system(command);
0018.00 getchar();
0019.00 } 
[解説]
10バイトだけ必要なライブラリー名に対しても 11バイトの mylib を定義していることに注意。
C言語の場合、NULL値でデータが終わりとみなすようになっているので最後のNULLを入れるための
余分な 1バイトが必要となってくるからである。
また C言語の変数は定義しただけでは RPG のように暗黙的に初期化はされないので
自分で memset(mylib, 0, sizeof(mylib)); のようにゼロ・リセットする必要がある。
このゼロ・リセットは C/400 では頻繁に使用する。strcpy とは文字列のコピー。
RPG のように myilb = “QTEMP” とすることはできない。
strcpy(mylib, "QTEMP");
または
memcpy(mylib, "QTEMP", 5);
のような記述となる。
sprintf(command, "DSPLIB LIB('%s') *PRINT", mylib);
とは command のフォーマット文であり、
command = "DSPLIB LIB('QTEMP') *PRINT"
と記述しているようなものである。
