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回だけ呼び出してください。メイン関数での初期化手順を次に示します。

  1. プロセス間通信のためのエントリポイントを開きます。
  2. OpenTP1で使う共用メモリを取得します。
  3. OpenTP1にUAPの開始を通知して,プロセスの監視を要求します。
  4. そのほか,設定した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_OK0正常に終了しました。
DCRPCER_INVALID_ARGS-301引数が間違っています。
DCRPCER_PROTO-302dc_rpc_open関数はすでに呼び出しています。
DCRPCER_FATAL-303初期化に失敗しました。以降,OpenTP1の関数は使えません。
DCRPCER_OLTF_NOT_UP-315UAPがあるノードの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に対して再設定(変更)しないでください。変更した場合の動作は保証できません。