総合手引 | セクション 1 | English | オプション |
rpcgen
ユーティリティは通常第 1 の書式で使用され、
1 つの入力ファイルから 4 つの出力ファイルを生成します。
入力ファイル
infile
が
proto.x
であるとすると、
rpcgen
はヘッダファイル
proto.h 、
XDR ルーチンファイル
proto_xdr.c 、
サーバ側スタブ
proto_svc.c 、
クライアント側スタブ
proto_clnt.c
を作成します。
rpcgen
ユーティリティはまた、特定アプリケーション向けにカスタマイズ可能な
クライアントおよびサーバのサンプルファイルも生成できます。
オプション
オプション
第二の書式は、更に洗練された RPC サーバを生成する特別な機能をもちます。 その特別な機能として、 ユーザが定義した #define と RPC ディスパッチテーブル のサポートがあります。 RPC ディスパッチテーブルのエントリには以下のものがあります:
上に示した他の 3 つの書式は、出力ファイルの全てではなく、
そのうちの特定のものだけを生成したい場合に用いられます。
rpcgen
の使用例については下の
使用例
のセクションを参照して下さい。
入力ファイルは、実際に rpcgen に処理される前に、 C プリプロセッサ cc -E で処理されます。 rpcgen は、出力ファイルの各タイプ毎に rpcgen プログラマ向けの特別なプリプロセッサシンボルを定義します:
RPC_HDR | |
ヘッダをコンパイルする際に定義されます | |
RPC_XDR | |
XDR ルーチンをコンパイルする際に定義されます | |
RPC_SVC | |
サーバ側スタブをコンパイルする際に定義されます | |
RPC_CLNT | |
クライアント側スタブをコンパイルする際に定義されます | |
RPC_TBL | |
RPC ディスパッチテーブルをコンパイルする際に定義されます | |
"%"
で始まる行は全て、
rpcgen
に解釈されることなく、
出力ファイルに直接引き継がれます。
C プリプロセッサのパス名を指定するには
infile で参照される全てのデータ型に対し、 rpcgen は、そのデータ型名の前に xdr_ を付与した名前の ルーチンが存在することを仮定します。 このルーチンが RPC/XDR ライブラリ中に存在しない場合は、 それを提供しなければなりません。 未定義データ型を提供することで xdr(3) ルーチンをカスタマイズすることが可能です。
| |
サンプルファイルを含め、全てのファイルを生成します。 | |
| |
従来互換モード。 以前のバージョンの OS のために、トランスポート固有の RPC コードを生成します。 | |
| |
XDR ルーチンをコンパイル出力します。 | |
| |
ANSI C コンパイラで使用できるヘッダおよびスタブファイルを生成します。 このオプションで生成したヘッダファイルは C++ プログラムでも使用できます。 | |
| |
シンボル name を定義します。 ソース中の #define 指示行と等価です。 value が指定されない場合、 value は 1 と定義されます。 このオプションは複数回の指定が可能です。 | |
| |
C のデータ定義 (ヘッダファイル) をコンパイル出力します。
同時に
| |
| |
インラインコードを生成し始めるサイズを指定します。
最適化を行う際に用いられます。デフォルト値は 5 です。
注: FreeBSD プラットホームでの以前の rpcgen と互換性を保つため、デフォルト値は実際には 0 (つまり、 デフォルトではインラインコードは生成しない) となっています。 このデフォルト値を上書きするには明示的に 0 以外の値を 指定しなければなりません。 | |
| |
サーバ側スタブにおける
inetd(8)
サポートコードを生成します。
このようにして生成したサーバは、単独で起動することも、
inetd(8)
から起動することもできます。
単独で起動した場合、デフォルトでは自らバックグラウンド動作に移ります。
特殊シンボル
RPC_SVC_FG
を定義するか、
単に
クライアントからの未処理リクエストがなければ、
inetd(8)
サーバは 120 秒 (デフォルト値) 経過の後、終了します。
このデフォルト値は
注: ポートモニタと inetd(8) から起動可能なサーバを作成するには、 他のシステムとは異なり、 FreeBSD では本オプションが必要です。
| |
| |
デフォルトでは、
rpcgen
を用いて作成され、ポートモニタから起動された
サービスは、リクエストを処理した後 120 秒待って終了します。
この時間は
サーバをモニタする場合、
あるサービスリクエストに対して
常に
新しいプロセスを生成するようなポートモニタがあります。
そのようなモニタを用いてサーバを使用することがわかっている場合は、
サーバは処理完了後直ちに終了すべきです。
そのようなサーバを生成するには、
rpcgen
は
| |
| |
クライアント側スタブをコンパイル出力します。 | |
| |
サーバがフォアグラウンドで起動された場合、 サーバのエラーを記録するのに、標準エラー出力に出力する代わりに syslog(3) を使用します。 | |
| |
サーバ側スタブをコンパイル出力しますが、 "main" ルーチンは生成しません。 コールバックルーチンのみを作成したり、初期化を行うために 独自の "main" ルーチンを必要とする場合に便利です。 | |
| |
rpcgen が生成したコードとユーザが書いたコードの間で 引数や結果を受渡しするために、 マルチスレッド対応の (MT-safe な) スタブを生成します。 ユーザプログラム中でスレッドを使用する場合に有用です。 しかし関数 rpc_svc_calls(3) [英語] はまだ MT-safe にはなっていません。 つまり rpcgen が生成したサーバ側コードは MT-safe ではありません。 | |
| |
手続きが複数の引数を持てるようにします。 これはまた、C 言語に大変似たパラメータ渡し方法を用います。 ですから遠隔手続きにある引数を渡す場合、 その引数へのポインタを渡す必要はなく、引数そのものを渡せます。 この動作は rpcgen が生成したコードの以前の振る舞いとは異なっています。 以前との互換性を保つため、このオプションはデフォルトでは有効ではありません。 | |
| |
netid で指定したトランスポート用のサーバ側スタブをコンパイル出力します。 netconfig データベースには netid 用エントリが存在しなければなりません。 このオプションを複数回指定することで、 複数のトランスポートに対してサービスするサーバを作成することができます。 | |
| |
出力ファイル名を指定します。
何も指定されなければ標準出力が用いられます
(
| |
| |
サーバ側のスタブにポートモニタサポートを組み込みます。
注: モニタ可能なサーバを作成するには、 他のシステムとは異なり、 FreeBSD では本オプションが必要です。
| |
| |
クラス nettype に属する全てのトランスポート用の サーバ側スタブをコンパイル出力します。 サポートされているクラスは以下の通りです: netpath, visible, circuit_n, circuit_v, datagram_n, datagram_v, tcp, udp (これらのクラスの意味については rpc(3) を参照して下さい) このオプションは複数回指定できます。 注: トランスポートはコンパイル時ではなく実行時に選択されます。 | |
| |
遠隔手続き呼び出しを用いるサンプルクライアントコードを生成します。 | |
| |
アプリケーションをコンパイルする際に用いるサンプル Makefile を生成します。 | |
| |
遠隔手続き呼び出しを用いるサンプルサーバコードを生成します。 | |
| |
RPC ディスパッチテーブルをコンパイル出力します。 | |
| |
RPC
ディスパッチテーブルをサポートするコードを生成します。
ある特定のタイプのファイルを生成するために、
以下のオプション
| |
| |
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
example% rpcgen -s datagram_n -DTEST prot.x
netid tcp で指定されたトランスポート用のサーバ側スタブを作成するには次のようにし ます:
example% rpcgen -n tcp -o prot_svc.c prot.x
RPCGEN (1) | March 28, 1993 |
総合手引 | セクション 1 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | On two occasions I have been asked [by members of Parliament], 'Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?' I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question. | ” |
— Charles Babbage |