最も高速なプロセス間通信を行いたいのであればユーザー待ち行列( *USRQ
) による通信が
ベストである。共有メモリによる通信の API もOS400 には用意されているが、実際に試したところ
ユーザー待ち行列( *USRQ ) による通信のほうが最速であった。
*USRQ はオブジェクトとして定義されているが実体はメモリであるので速いのである。
*USRQ の作成には QUSCRTUQ
という API を使って作成する必要がある。
次のサンプル CLP ソースではライブラリー QTEMP
に CMD
という名前の *USRQ を
QUSCRTUQ を使って作成している。
*USRQ の読み取りや書き込みは MI (マシンインターフェース) を必要とするため
C言語による記述が必要となる。このため読み取りと書き込みは Tools にサンプルを公開しているので
そちらを参考にされたい。
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* USCRTUQ : RUNQRY *NONE QUSRSYS/ACCESSLOG */ 0004.00 /*---------------------------------------------------------*/ 0005.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80) 0006.00 DCL VAR(&QNAMELIB) TYPE(*CHAR) LEN(20) + 0007.00 VALUE('CMDQ QTEMP ') 0008.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0009.00 VALUE(X'00000000') /* 2 進数 */ 0010.00 DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') 0011.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0012.00 0013.00 CHGVAR VAR(&QNAMELIB) VALUE('TESTQ QTEMP + 0014.00 ' *CAT &NULL) 0015.00 CALL PGM(QUSCRTUQ) PARM(&QNAMELIB 'PF ' + 0016.00 'F' 0 1000 100 3 '*ALL ' 'DSPTEMP CMDQ') 0017.00 0018.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG) 0019.00 SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) 0020.00 ENDPGM