RPCGEN(1) | FreeBSD General Commands Manual | 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 つの出力ファイルを生成します。入力ファイル infile が proto.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 を指定するとサンプルを含め全てのファイルを生成します。入力ファイル infile が proto.x の場合、クライアント側サンプルファイルは、 proto_client.c に、サーバ側サンプルファイルは、 proto_server.c に、そしてサンプル makefile は、 makefile.proto に書き込まれます。
オプション -I が設定されている場合、生成されたサーバは、ポートモニタ (例えば inetd(8)) で起動することも、それ自身で起動することもできます。ポートモニタから起動される場合、ファイル記述子 0 を引き渡すトランスポートのためだけのサーバを生成します。トランスポートの名前は、環境変数 NLSPROVIDER をセットすることで指定可能です。 rpcgen で作成されたサーバが実行されると、サーバは、環境変数 NETPATH で指定された全トランスポート用にサーバハンドルを作成します。指定されていない場合は、ファイル /etc/netconfig に記述されている全ての可視トランスポート用にサーバハンドルを作成します。注意: トランスポートは、コンパイル時ではなく実行時に選択されます。サーバが自分で開始すると、デフォルトでは、自動的にバックグラウンド実行に移ります。 RPC_SVC_FG を定義することで、サーバをフォアグラウンドで実行させることもできます。
第二の書式は、更に洗練された RPC サーバを生成する特別な機能をもちます。その特別な機能として、ユーザが定義した #define と RPC ディスパッチテーブルのサポートがあります。 RPC ディスパッチテーブルのエントリには、以下のものがあります:
- その手続きに対応するサービスルーチンへのポインタ
- 入出力引数へのポインタ
- これらのルーチンのサイズ
サーバは、ディスパッチテーブルを用いて認証チェックを行い、それからサービスルーチンを実行することができます。クライアントライブラリは、それを用いて、記憶領域管理や XDR データ変換の詳細に対処することができます。
上に示した他の 3 つの書式は、出力ファイルの全てではなく、そのうちの特定のものだけを生成したい場合に用いられます。 rpcgen の使用例については、下の 使用例 のセクションを参照して下さい。 -s オプション付きで実行されると、 rpcgen は、特定のトランスポートクラス用のサーバを生成します。 -n オプション付きで実行されると、 netid で指定されたトランスポート用サーバを生成します。 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 コードを生成します。これは、常に行われます、フラグは、後方互換性のためだけに提供されています。
- -D name
- -D name=value
- シンボル name を定義します。ソース中の #define 指示行と等価です。 value が指定されない場合、 value は、 1 と定義されます。このオプションは、複数回の指定が可能です。
- -h
- C のデータ定義 (ヘッダファイル) をコンパイル出力します。同時に -T オプションを指定することで、 RPC ディスパッチテーブルをサポートするヘッダファイルを生成できます。
- -i size
-
インラインコードを生成し始めるサイズを指定します。最適化を行う際に用いられます。デフォルト値は、5 です。
注: FreeBSD プラットフォームでの以前の rpcgen と互換性を保つため、デフォルト値は、実際には、0 (つまり、デフォルトでは、インラインコードは、生成しない) となっています。このデフォルト値を上書きするには、明示的に 0 以外の値を指定しなければなりません。
- -I
-
サーバ側スタブにおける
inetd(8) サポートコードを生成します。このようにして生成したサーバは、単独で起動することも、
inetd(8) から起動することもできます。単独で起動した場合、デフォルトでは、自らバックグラウンド動作に移ります。特殊シンボル
RPC_SVC_FG を定義するか、単に
-I オプションなしでコンパイルすると、サーバプロセスは、フォアグラウンドで動作します。
保留中 (pending) のクライアントのリクエストがなければ、 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 プリプロセッサを探し始めるディレクトリ名を指定します。
環境変数
RPCGEN_CPP 環境変数が設定されているなら、その値は、入力ファイルで実行される 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) The rpcgen chapter in the NETP manual. (NETP マニュアルの rpcgen の章)September 2, 2005 | FreeBSD |