C/400

6. C言語から iSeries400のコマンドを実行するには?

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"

と記述しているようなものである。