通常、OmniRpcではリモート実行プログラムをAgent経由で起動します。これに より、以下の利点があります
ここで説明するのは、Agentを使わずにクライアントプログラムがリモート実 行プログラムを直接起動し、呼び出しを行う方法です。特定のリモートホスト で、決まったパスにあるリモート実行プログラムがある場合にはリモート実行 プログラムの登録などの手続を省くことができる他、以下の利点があります。
例として以下のような環境設定を仮定します。
この機能を使う場合には、下のようにAgentを使わずにrexを直接起動し、 通信を行います。
まず、直接起動のAPIを使うためにはAgentを使いませんので、ライブラリの初 期化は、OmniRpcExecInit()で行います。
リモートホストでのリモート実行プログラムの起動のAPIは、 OmniRpcHandleを用いたAPIに似ています。OmniRpcExecOnHost()は、指定され たホストにおいて、パスで指定されたリモート実行プログラムを起動し、それ についてコネクションを表現するデータ構造であるOmniRpcExecHandleを返し ます。これについて、OmniRpcExecCallを使って、モジュール内の関数を呼び 出すことができます。
以下に例を示します。
#include <OmniRpc.h> #include <stdio.h> int main(int argc,char *argv[]){ double r; OmniRpcExecHandle handle; OmniRpcExecInit(&argc,&argv); handle = OmniRpcExecOnHost("dennis.hpcc.jp","/usr/local/tmp/calc_sin.rex"); OmniRpcExecCall(handle,"calc_sin",10,&r); printf("sin(10)=%g\n",r); OmniRpcExecTerminate(handle); OmniRpcExecFinalize(); exit(0); }
OmniRpcExecTerminateは、handleに対応するリモート実行プログラムを終了さ せます。最後に、プログラムの終了時には、OmniRpcExecFinalizeを呼び出し てください。
リモート実行プログラムをどのような起動方法を使って起動するかについては、 実行プログラムの引数で指定します。例えば、globusを用いて起動する場合に は、
% a.out --globus args
というように、--globusを指定します。この他に、sshで起動する場合には、 --sshと指定します。何も指定しない場合には、rshで起動することになります。
現在のところ、この方法での起動方法については以下の制限があります。
これらの点については、改善していく予定です。