dc_rpc_open
形式
ANSI C ,C++の形式
#include <dcrpc.h> int dc_rpc_open(DCLONG flags)
K&R版 C の形式
#include <dcrpc.h> int dc_rpc_open(flags) DCLONG flags;
機能
OpenTP1の各種関数を使う準備をします。
dc_rpc_open関数はメイン関数で呼び出します。すべてのOpenTP1の関数を呼び出す前に,プロセスで1回だけ呼び出してください。メイン関数での初期化手順を次に示します。
-
プロセス間通信のためのエントリポイントを開きます。
-
OpenTP1で使う共用メモリを取得します。
-
OpenTP1にUAPの開始を通知して,プロセスの監視を要求します。
-
そのほか,設定したUAPの環境に従って,使うOpenTP1の各機能の初期化処理をします。
UAPにトランザクション属性を指定している場合は,そのノードでOpenTP1のトランザクションサービスとプロセスサービスが実行中であることが前提になります。dc_rpc_open関数は,OpenTP1がOSの開始に伴って,またはdcstartコマンドによって正常開始したあとでないと実行できません。OpenTP1が正常開始する前にdc_rpc_open関数を呼び出すと,DCRPCER_OLTF_NOT_UPでエラーリターンします。この場合は,dc_rpc_call関数などのOpenTP1の関数は使えません。
UAPトレースは,dc_rpc_open関数が正常に終了したあとに呼び出したすべてのOpenTP1の関数について取得されます。そのため,dc_rpc_open関数がエラーリターンした場合のUAPトレースは,取得されている場合も取得されていない場合もあります。
UAPで値を設定する引数
●flags
DCNOFLAGSを設定します。
リターン値
リターン値 |
リターン値(数値) |
意味 |
---|---|---|
DC_OK |
0 |
正常に終了しました。 |
DCRPCER_INVALID_ARGS |
-301 |
引数が間違っています。 |
DCRPCER_PROTO |
-302 |
dc_rpc_open関数はすでに呼び出しています。 |
DCRPCER_FATAL |
-303 |
初期化に失敗しました。以降,OpenTP1の関数は使えません。 |
DCRPCER_OLTF_NOT_UP |
-315 |
UAPがあるノードのOpenTP1が実行していません。 |
DCRPCER_STANDBY_END |
-369 |
待機系のユーザサーバが,待機の終了を要求されました。 |
DCRPCER_SEC_INIT |
-371 |
セキュリティ機能を使ったOpenTP1が,セキュリティ環境の初期化処理でエラーになりました。 |
指定例
#include <dcrpc.h> main(){ if(dc_rpc_open(DCNOFLAGS) < 0){ fputs("cannot begin usrserv1",stderr); goto RPC_CLOSE; } if(dc_rpc_mainloop(DCNOFLAGS) < 0) fputs("cannot begin usrserv1",stderr); /* サービス関数が呼び出されて実行されます。 */ /* この間,メイン関数には制御は戻りません */ RPC_CLOSE: dc_rpc_close(DCNOFLAGS); }
注意事項
dc_rpc_open関数は,定義ファイルで設定した内容に従って,UAPが使うOpenTP1の各機能の環境設定(初期化)をします。
初期化処理では,UAPプロセスでオープンするファイルディスクリプタの最大数をOSに対して設定します。したがって,dc_rpc_open関数の発行後,UAPプロセスでオープンするファイルディスクリプタの最大数をOSに対して再設定(変更)しないでください。変更した場合の動作は保証できません。