スポンサーリンク

RPCGEN(1) FreeBSD 一般コマンドマニュアル RPCGEN(1)

名称

rpcgen − RPC プロトコルコンパイラ

書式

rpcgen infile

rpcgen [−a] [−b] [−C] [

                              −Dname[=value]] [−i size] [−I −P [−K seconds]][−L] [−M] [−N] [−T] [−Y pathname] infile

rpcgen [
−c
| −h | −l | −m | −t | −Sc | −Ss | −Sm] [−o outfile] [infile]
rpcgen
[−s nettype] [−o outfile] [infile]
rpcgen
[−n netid] [−o outfile] [infile]

解説

rpcgen ユーティリティは、ある RPC プロトコルを実現する C コードを生成する ツールです。 rpcgen への入力は、 RPC 言語 (遠隔手続き呼び出し言語; Remote Procedure Call Language) として知られる、 C 言語に類似した言語です。

rpcgen ユーティリティは通常第 1 の書式で使用され、 1 つの入力ファイルから 4 つの出力ファイルを生成します。入力ファイル infileproto.x であるとす ると、 rpcgen はヘッダファイル proto.h 、 XDR ルーチンファイル proto_xdr.c 、サーバ側スタブ proto_svc.c 、クライアント側スタブ proto_clnt.c を作成します。 −T オプションを指定すると、上記に加え、 RPC ディスパッチテーブル proto_tbl.i も作成します。

rpcgen ユーティリティはまた、特定アプリケーション向けにカスタマイズ可能な クライアントおよびサーバのサンプルファイルも生成できます。オプション −Sc, −Ss, −Sm によってそれぞれ、サンプルのクライアント、サーバ、makefile を生 成します。オプション −a を指定するとサンプルを含め全てのファイルを生成し ます。入力ファイル infileproto.x の場合、クライアント側サンプルファイ ルは proto_client.c に、サーバ側サンプルファイルは proto_server.c に、そ してサンプル makefile は makefile.proto に書き出されます。

オプション −I が設定されている場合、生成されたサーバは、ポートモニタ (例 えば inetd(8) ) で起動することも、それ自身で起動することもできます。ポー トモニタから起動される場合、ファイル記述子 0 を引き渡すトランスポートのた めだけのサーバを生成します。トランスポートの名前は環境変数 NLSPROVIDER を セットすることで指定可能です。 rpcgen で作成されたサーバが実行されると、 サーバは環境変数 NETPATH で指定された全トランスポート用にサーバハンドルを 作成します。 NETPATH が指定されていない場合は、ファイル /etc/netconfig に 記述されている全ての可視トランスポート用にサーバハンドルを作成します。注 意: トランスポートはコンパイル時ではなく実行時に選択されます。サーバが自 分で開始すると、デフォルトでは自動的にバックグラウンド実行に移ります。 RPC_SVC_FG を定義することで、サーバをフォアグラウンドで実行させることもで きます。

第二の書式は、更に洗練された RPC サーバを生成する特別な機能をもちます。そ の特別な機能として、ユーザが定義した #define と RPC ディスパッチテーブル のサポートがあります。 RPC ディスパッチテーブルのエントリには以下のものが あります:

 その手続きに対応するサービスルーチンへのポインタ

入出力引数へのポインタ
これらのルーチンのサイズ
サーバはディスパッチテーブルを用いて認証チェックを行い、それからサービス ルーチンを実行することができます。クライアントライブラリはそれを用いて、 記憶領域管理や XDR データ変換の詳細に対処することができます。

上に示した他の 3 つの書式は、出力ファイルの全てではなく、そのうちの特定の ものだけを生成したい場合に用いられます。 rpcgen の使用例については下の 使 用例のセクションを参照して下さい。 −s オプション付きで実行されると、 rpcgen は特定のトランスポートクラス用のサーバを生成します。 −n オプション 付きで実行されると、 rpcgennetid で指定されたトランスポート用サーバを 生成します。 infile が指定されない場合、 rpcgen は標準入力から入力を受け 付けます。

入力ファイルは、実際に rpcgen に処理される前に、 C プリプロセッサ cc -E で処理されます。 rpcgen は、出力ファイルの各タイプ毎に rpcgen プログラマ 向けの特別なプリプロセッサシンボルを定義します:

RPC_HDR
ヘッダをコンパイルする際に定義されます

RPC_XDR
XDR ルーチンをコンパイルする際に定義されます

RPC_SVC
サーバ側スタブをコンパイルする際に定義されます

RPC_CLNT
クライアント側スタブをコンパイルする際に定義されます

RPC_TBL
RPC ディスパッチテーブルをコンパイルする際に定義されます

‘‘%’’ で始まる行は全て、 rpcgen に解釈されることなく、出力ファイルに直接 引き継がれます。 C プリプロセッサのパス名を指定するには −Y フラグを使用し て下さい。

infile で参照される全てのデータ型に対し、 rpcgen は、そのデータ型名の前に xdr_ を付与した名前のルーチンが存在することを仮定します。このルーチンが RPC/XDR ライブラリ中に存在しない場合は、それを提供しなければなりません。 未定義データ型を提供することで xdr(3) ルーチンをカスタマイズすることが可 能です。

オプション

オプションは以下の通りです:

       −a

サンプルファイルを含め、全てのファイルを生成します。

−b
従来互換モード。以前のバージョンの OS のために、トランスポート固 有の RPC コードを生成します。

−c
XDR ルーチンをコンパイル出力します。

−C
ANSI C コンパイラで使用できるヘッダおよびスタブファイルを生成しま す。このオプションで生成したヘッダファイルは C++ プログラムでも使 用できます。

−Dname

−Dname=value
シンボル name を定義します。ソース中の #define 指示行と等価です。 value が指定されない場合、 value1 と定義されます。このオプ ションは複数回の指定が可能です。

−h
C のデータ定義 (ヘッダファイル) をコンパイル出力します。同時に −T オプションを指定することで、 RPC ディスパッチテーブルをサポートす るヘッダファイルを生成できます。

−i size
インラインコードを生成し始めるサイズを指定します。最適化を行う際 に用いられます。デフォルト値は 5 です。

注: FreeBSD プラットホームでの以前の rpcgen と互換性を保つため、 デフォルト値は実際には 0 (つまり、デフォルトではインラインコード は生成しない) となっています。このデフォルト値を上書きするには明 示的に 0 以外の値を指定しなければなりません。

−I
サーバ側スタブにおける inetd(8) サポートコードを生成します。この ようにして生成したサーバは、単独で起動することも、 inetd(8) から 起動することもできます。単独で起動した場合、デフォルトでは自ら バックグラウンド動作に移ります。特殊シンボル RPC_SVC_FG を定義す るか、単に −I オプションなしでコンパイルすると、サーバプロセスは フォアグラウンドで動作します。

クライアントからの未処理リクエストがなければ、 inetd(8) サーバは 120 秒 (デフォルト値) 経過の後、終了します。このデフォルト値は −K オプションにより変更できます。 inetd(8) サーバの全エラーメッセー ジは常に syslog(3) によってログに残されます。

注: ポートモニタと inetd(8) から起動可能なサーバを作成するには、 他のシステムとは異なり、 FreeBSD では本オプションが必要です。

−K seconds
デフォルトでは、 rpcgen を用いて作成され、ポートモニタから起動さ れたサービスは、リクエストを処理した後 120 秒待って終了します。こ の時間は −K オプションを用いて変更できます。リクエスト処理が済む と直ちに終了するようなサーバを生成するには、 −K 0 と指定します。 また、決して終了しないサーバを生成するには、 −K -1 として下さい。

サーバをモニタする場合、あるサービスリクエストに対して 常に新しい プロセスを生成するようなポートモニタがあります。そのようなモニタ を用いてサーバを使用することがわかっている場合は、サーバは処理完 了後直ちに終了すべきです。そのようなサーバを生成するには、 rpcgen−K 0 オプションとともに使用すべきです。

−l
クライアント側スタブをコンパイル出力します。

−L
サーバがフォアグラウンドで起動された場合、サーバのエラーを記録す るのに、標準エラー出力に出力する代わりに syslog(3) を使用します。

−m
サーバ側スタブをコンパイル出力しますが、 "main" ルーチンは生成し ません。コールバックルーチンのみを作成したり、初期化を行うために 独自の "main" ルーチンを必要とする場合に便利です。

−M
rpcgen が生成したコードとユーザが書いたコードの間で引数や結果を受 渡しするために、マルチスレッド対応の (MT-safe な) スタブを生成し ます。ユーザプログラム中でスレッドを使用する場合に有用です。しか し関数 rpc_svc_calls(3) はまだ MT-safe にはなっていません。つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。

−N
手続きが複数の引数を持てるようにします。これはまた、C 言語に大変 似たパラメータ渡し方法を用います。ですから遠隔手続きにある引数を 渡す場合、その引数へのポインタを渡す必要はなく、引数そのものを渡 せます。この動作は rpcgen が生成したコードの以前の振る舞いとは異 なっています。以前との互換性を保つため、このオプションはデフォル トでは有効ではありません。

−n netid
netid
で指定したトランスポート用のサーバ側スタブをコンパイル出力 します。 netconfig データベースには netid 用エントリが存在しなけ ればなりません。このオプションを複数回指定することで、複数のトラ ンスポートに対してサービスするサーバを作成することができます。

−o outfile
出力ファイル名を指定します。何も指定されなければ標準出力が用いら れます ( −c, −h, −l, −m, −n, −s, −Sc, −Sm, −Ss, −t モード時の み)。

−P
サーバ側のスタブにポートモニタサポートを組み込みます。

注: モニタ可能なサーバを作成するには、他のシステムとは異なり、 FreeBSD では本オプションが必要です。

−I オプションが指定された場合、 −P は自動的にオフになります。

−s nettype
クラス nettype に属する全てのトランスポート用のサーバ側スタブをコ ンパイル出力します。サポートされているクラスは以下の通りです: netpath, visible, circuit_n, circuit_v, datagram_n, datagram_v, tcp, udp (これらのクラスの意味については rpc(3) を参照して下さい) このオプションは複数回指定できます。注: トランスポートはコンパイ ル時ではなく実行時に選択されます。

−Sc
遠隔手続き呼び出しを用いるサンプルクライアントコードを生成しま す。

−Sm
アプリケーションをコンパイルする際に用いるサンプル Makefile を生 成します。

−Ss
遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。

−t
RPC ディスパッチテーブルをコンパイル出力します。

−T
RPC ディスパッチテーブルをサポートするコードを生成します。

ある特定のタイプのファイルを生成するために、以下のオプション −c, −h, −l, −m, −s, −Sc, −Sm, −Ss, −t は排他的に使用されます。他方、 オプション −D−T は大域的であり、他のオプションと組み合わせて 使用できます。

−Y pathname
rpcgen
が C プリプロセッサを探し始めるディレクトリ名を指定しま す。

使用例

以下の例:

example% rpcgen -T prot.x

は 5 種類のファイル: prot.h, prot_clnt.c, prot_svc.c, prot_xdr.c, prot_tbl.i の全てを生成します。

次の例は C のデータ定義 (ヘッダ) を標準出力に出力します。

example% rpcgen -h prot.x

−DTEST のテストバージョンを作成するため、クラス datagram_n に属する全トラ ンスポート用サーバ側スタブを標準出力に出力するには次のようにします:

example% rpcgen -s datagram_n -DTEST prot.x

netid tcp で指定されたトランスポート用のサーバ側スタブを作成するには次の ようにします:

example% rpcgen -n tcp -o prot_svc.c prot.x

関連項目

cc(1), rpc(3), rpc_svc_calls(3), syslog(3), xdr(3), inetd(8)

       NETP マニュアルの rpcgen の章.
FreeBSD 10.0                    March 28, 1993                    FreeBSD 10.0
スポンサーリンク