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"
と記述しているようなものである。