Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス C言語編


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_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に対して再設定(変更)しないでください。変更した場合の動作は保証できません。