dc_mcf_execap
形式
ANSI C ,C++の形式
#include <dcmcf.h> int dc_mcf_execap(DCLONG action,DCLONG commform,char *resv01, DCLONG active,char *apnam,char *comdata, DCLONG cdataleng)
K&R版 C の形式
#include <dcmcf.h> int dc_mcf_execap(action,commform,resv01,active,apnam,comdata, cdataleng) DCLONG action; DCLONG commform; char *resv01; DCLONG active; char *apnam; char *comdata; DCLONG cdataleng;
機能
UAP(SPP,またはMHP)から,apnamに設定したアプリケーション名のMHPを起動させます。トランザクション終了後またはサービス関数終了後,すぐに起動させることも,設定した時間経過後に起動させることもできます。詳細については,マニュアル「OpenTP1 プログラム作成の手引」の「アプリケーションプログラムの起動」の説明を参照してください。
SPPからdc_mcf_execap関数を呼び出した場合は,SPPがトランザクションとして処理していることと,そのSPPのメイン関数でdc_mcf_open関数を呼び出していることが前提です。
MHPからdc_mcf_execap関数でMHPを起動させる場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は,最初に受信したメッセージ中の名称になります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は,最初にメッセージを受信したときの名称が引き渡されます。
SPPからdc_mcf_execap関数でMHPを起動する場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は「*」となります。さらに,そのMHPからdc_mcf_execap関数を呼び出した場合も,受け取るメッセージ入力元の論理端末名称は「*」となります。
送信できるメッセージの一つのセグメント長は,actionにDCMCFLENXを設定していない場合は32,000バイトまで,actionにDCMCFLENXを設定してセグメント長を拡張した場合は1メガバイトまでです。ただし,プロトコルによって,実際の最大長が異なる場合があります。詳細については,マニュアル「OpenTP1 プロトコル」の該当するプロトコル編を参照してください。
起動させるMHPに渡すメッセージのセグメント形式を次に示します。Lは,バッファ形式1の場合は8バイト,バッファ形式2の場合は4バイトです。
UAPで値を設定する引数
●action
起動させるMHPに渡すセグメントが論理メッセージの最終セグメントかどうか,MHPをいつ起動させるか,および使うバッファ形式を,次の形式で設定します。
{DCMCFESI|DCMCFEMI}〔|{DCMCFJUST|DCMCFINTV|DCMCFTIME}〕 〔|{DCMCFBUF1|DCMCFBUF2}〕〔|DCMCFLENX〕
- DCMCFESI
-
先頭セグメント,または中間セグメントを渡すときに設定します。この値を設定したdc_mcf_execap関数を呼び出した場合は,そのあとに必ずactionにDCMCFEMIを設定したdc_mcf_execap関数を呼び出してください。
- DCMCFEMI
-
最終セグメントを渡すときに設定します。
論理メッセージが単一セグメントの場合も,DCMCFEMIを設定します。
先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも,DCMCFEMIを設定します。
- DCMCFJUST
-
即時起動のときに設定します。このとき,activeに設定した値は無視されます。
- DCMCFINTV
-
経過時間指定のタイマ起動のときに設定します。dc_mcf_execap関数を呼び出してからactiveに設定した時間だけ経過したあとに,MHPを起動させます。
- DCMCFTIME
-
時刻指定のタイマ起動の場合に設定します。activeに設定した時刻に,MHPを起動させます。
- DCMCFBUF1
-
バッファ形式1を使うときに設定します。
- DCMCFBUF2
-
バッファ形式2を使うときに設定します。
- DCMCFLENX
-
送信する一つのセグメントを32,000バイトより大きくしたい場合に設定します。
●commform
DCNOFLAGSを設定します。
●resv01
ヌル文字列を設定します。
●active
-
経過時間指定のタイマ起動(actionにDCMCFINTVを設定)の場合
dc_mcf_execap関数を呼び出してから,何秒後にMHPを起動させるかを設定します。設定できる秒数の範囲は,1から360000まで(1秒から100時間まで)です。
-
時刻指定のタイマ起動(actionにDCMCFTIMEを設定)の場合
apnamに設定したMHPを起動させる時刻を設定します。0時0分0秒を基準にして,起動時刻を秒数で算出して設定します。時刻はローカルタイムで指定します。
- (時刻の設定例)
-
午後2時30分30秒(ローカルタイム)に起動させる場合:
14 × 3600 + 30 × 60 + 30 = 52230
…52230をactiveに設定します。
設定できる値の範囲は,0(0時0分0秒に開始)から86399(23時59分59秒に開始)までです。
activeに設定した値は,タイマ起動の場合にだけ有効となります。即時起動の場合は,activeに設定した値は無視されます。
- 注意事項
-
-
経過時間指定のタイマ起動の場合
時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,activeに設定した経過時間と実際に起動する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間で起動することがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。
-
時刻指定のタイマ起動の場合
時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,activeに設定した時刻と実際に起動する時刻には秒単位の誤差が生じます。
-
●apnam
起動させるMHPのアプリケーション名を設定します。アプリケーション名は最大8バイトです。アプリケーション名の最後にはヌル文字を付けます。
●comdata
起動させるMHPに渡す,メッセージのセグメントの内容を設定します。先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも,必ず設定してください。
●cdataleng
起動させるMHPに渡すセグメントの長さを設定します。actionにDCMCFLENXを設定していない場合,1〜32000の範囲で設定できます。actionにDCMCFLENXを設定した場合,1〜1048576の範囲で設定できます。先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合には,0を設定します。
リターン値
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
DCMCFRTN_00000 |
0 |
正常に終了しました。 |
DCMCFRTN_71002 |
-12002 |
メッセージキューへの入出力処理時に障害が起こりました。 |
メッセージキューが閉塞されています。 |
||
メッセージキューが割り当てられていません。 |
||
<actionにDCMCFLENXを設定していない場合> セグメント長に32,000バイトを超える値を設定しています。 <actionにDCMCFLENXを設定している場合> セグメント長に1メガバイトを超える値を設定しています。 |
||
MCFが終了処理中のため,apnamに設定したMHPを起動できません。 |
||
DCMCFRTN_71003 |
-12003 |
メッセージキューが満杯です。 |
DCMCFRTN_71004 |
-12004 |
メッセージを格納するバッファをメモリ上に確保できませんでした。 |
DCMCFRTN_71108 |
-12108 |
apnamに設定したアプリケーション名のMHPを起動しようとしましたが,起動させようとしたMHPの管理テーブルが確保できませんでした。 |
プロセスのローカルメモリが不足しています。 |
||
DCMCFRTN_72000 |
-13000 |
<MHPの実行でリターンした場合> actionにDCMCFFRSTを設定したdc_mcf_receive関数を呼び出す前に,dc_mcf_execap関数を呼び出しています。 |
<SPPの実行でリターンした場合> トランザクションでないSPPの処理から,dc_mcf_execap関数を呼び出しています。 |
||
DCMCFRTN_72001 |
-13001 |
設定したアプリケーション名は,MCFで定義していません。 |
アプリケーション名が間違っています。 |
||
MCFマネジャ定義の通信サービス定義(mcfmcname定義コマンド)に,アプリケーション起動プロセス名を指定していません。 |
||
アプリケーション起動プロセスに対応するMCFアプリケーション定義の環境定義(mcfaenv定義コマンドの-pオプション)に,アプリケーション起動プロセス識別子を指定していません。 |
||
アプリケーション環境定義(mcfaenv定義コマンドの-pオプション)で指定したアプリケーション起動プロセス識別子と,アプリケーション起動プロセスの通信構成定義(mcftenv定義コマンド)で指定する識別子が一致していません。 |
||
<非応答型のMHPを起動する場合>
|
||
<応答型および継続問い合わせ応答型のMHPを起動する場合>
|
||
<SPPからアプリケーションを起動する場合>
|
||
DCMCFRTN_72005 |
-13005 |
actionでDCMCFESIを設定したdc_mcf_execap関数で,メッセージのセグメント長に1バイト未満の値を設定しています。 |
DCMCFRTN_72007 |
-13007 |
dc_mcf_reply関数をすでに呼び出した 応答型(type=ans)のMHPから,応答型のMHPをdc_mcf_execap関数で起動させています。 |
dc_mcf_reply関数をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,継続問い合わせ応答型のMHPを dc_mcf_execap関数で起動させています。 |
||
DCMCFRTN_72009 |
-13009 |
応答型(type=ans)のMHPから,dc_mcf_execap関数で応答型のMHPを2回以上起動させています。 |
継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを2回以上起動させています。 |
||
DCMCFRTN_72011 |
-13011 |
応答型(type=ans)でないMHPから,dc_mcf_execap関数で応答型のMHPを起動させています。 |
継続問い合わせ応答型(type=cont)でないMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを起動させています。 |
||
DCMCFRTN_72016 |
-13016 |
actionに設定できない値を設定しています。 |
resv01に設定した値がヌル文字になっていません。 |
||
actionに設定したアプリケーション起動の方法が間違っています。 |
||
設定した引数が間違っています。 |
||
<非応答型のMHPを起動する場合> 起動先アプリケーションのアプリケーション属性定義の論理端末(mcfaalcap定義コマンドの-nオプションのlnameオペランド)に,送信セグメントの拡張(DCMCFLENX)をサポートしていないプロトコルで使用する論理端末を設定しています。 |
||
<応答型および継続問い合わせ応答型のMHPを起動する場合> 起動先アプリケーションのアプリケーション属性定義の内部通信路(mcfaalcap定義コマンドの-nオプションのcnameオペランド)に,送信セグメントの拡張(DCMCFLENX)をサポートしていないプロトコルで使用するコネクションを設定しています。 |
||
DCMCFRTN_72024 |
-13024 |
commformにDCNOFLAGSを設定していません。 |
DCMCFRTN_72026 |
-13026 |
actionのセグメント種別(最終セグメント DCMCFEMI,または最終セグメント以外 DCMCFESI)に設定した値が間違っています。 |
DCMCFRTN_72041 |
-13041 |
<メッセージが単一セグメントの場合> cdatalengに0バイト,またはマイナス値を設定しています。 |
<メッセージが複数セグメントの場合> actionにDCMCFESIを設定したdc_mcf_execap関数を呼び出さないで,メッセージの送信の終了を連絡しています。 |
||
DCMCFRTN_72044 |
-13044 |
dc_mcf_contend関数をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で 継続問い合わせ応答型のMHPを起動させています。 |
DCMCFRTN_72108 |
-13108 |
activeに設定できる範囲の値を超えています。 |
DCMCFRTN_72109 |
-13109 |
MCFアプリケーション定義で継続問い合わせ応答型(type=cont)と指定したMHPを,タイマ起動のdc_mcf_execap関数で起動させようとしています。 |
DCMCFRTN_77001 |
-18001 |
起動しようとしたアプリケーションに対応する論理端末(LE)は,処理中で使えません。または使える論理端末がありません。 |
上記以外 |
プログラムの破壊などによる,予期しないエラーが発生しました。 |
注意事項
-
MCFマネジャ定義のUAP共通定義(mcfmuap -c order)の指定によって,アプリケーションプログラムの起動順序が異なりますので注意してください。
-
一つのサービス関数で,TAMまたはDAMファイルの更新とdc_mcf_execap関数の呼び出しをして,起動先のアプリケーションで更新後のTAMまたはDAMファイルを参照させたい場合,TAMまたはDAMファイルを排他ありで参照してください。排他なしで参照した場合,更新前のデータが入力されることがあります。
-
次のセグメント長に関連する項目を見積もってください。
-
システム環境定義の動的共用メモリの最大使用時の総量(dynamic_shmpool_size)
-
システムジャーナルサービス定義の最大レコードデータ長(jnl_max_datasize)
-
MCFマネジャ定義のユーザサーバのジャーナルバッファの大きさ(mcfmuap -j)
-
MCFマネジャ定義の最大セグメント長(mcfmuap -e segsize)
-
MCFで使用する動的共用メモリの総量
-
システムジャーナルファイルの総量
-
メッセージキューファイルの総量
-