1 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
3 .\" %%%LICENSE_START(BSD_ONELINE_CDROM)
4 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
7 .\" @(#)xdr.3n 2.2 88/08/03 4.0 RPCSRC; from 1.16 88/03/14 SMI
9 .\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
11 .\"*******************************************************************
13 .\" This file was generated with po4a. Translate the source file.
15 .\"*******************************************************************
16 .TH XDR 3 2007\-12\-30 "" "Linux Programmer's Manual"
18 xdr \- 外部データ表現(XDR)のためのライブラリ・ルーティン
21 これらのルーティンは C プログラマーがマシン非依存な形式で 任意のデータ構造体を記述することを可能にする。
22 リモート・プロシジャ・コールのためのデータはこれらのルーティンを 使用して送信される。
24 以下に示すプロトタイプ宣言は \fI<rpc/xdr.h>\fP で行われており、その中では次の型が使用される。
28 typedef int \fIbool_t\fP;
30 typedef bool_t (*\fIxdrproc_t\fP) (XDR *, void *,...);
34 \fIXDR\fP 型の宣言については、 \fI<rpc/xdr.h>\fP を参照。
37 \fBbool_t xdr_array(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIarrp\fP\fB, unsigned int *\fP\fIsizep\fP\fB,\fP
38 \fB unsigned int \fP\fImaxsize\fP\fB, unsigned int \fP\fIelsize\fP\fB,\fP
39 \fB xdrproc_t \fP\fIelproc\fP\fB);\fP
42 可変長の配列とそれに対応する外部表現とを変換する基本フィルター。 引き数 \fIarrp\fP は配列へのポインターのアドレスであり、 \fIsizep\fP
43 は配列の要素数のアドレスである。 これらの要素数は \fImaxsize\fP を超えてはならない。 引き数 \fIelsize\fP は各配列の要素の
44 \fIsizeof\fP であり、 \fIelproc\fP は配列要素を C 形式からその外部表現に変換するための XDR フィルターである。
45 このルーティンは成功した場合には 1 を返す。 失敗した場合にはゼロを返す。
48 \fBbool_t xdr_bool(XDR *\fP\fIxdrs\fP\fB, bool_t *\fP\fIbp\fP\fB);\fP
51 真偽値(C の int)とその外部表現とを変換する基本フィルター。 データをエンコードする時、このフィルターは 1 また 0 の値を生成する。
52 このルーティンは成功した場合には 1 を返す。 失敗した場合には 0 を返す。
55 \fBbool_t xdr_bytes(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIsp\fP\fB, unsigned int *\fP\fIsizep\fP\fB,\fP
56 \fB unsigned int \fP\fImaxsize\fP\fB);\fP
59 ある長さのバイト文字列とその外部表現とを変換する基本フィルター。 引き数 \fIsp\fP は文字列ポインターのアドレスである。文字列の長さは
60 \fIsizep\fP のアドレスに置く。文字列は \fImaxsize\fP より長くてはいけない。 このルーティンは成功した場合には 1 を返す。
64 \fBbool_t xdr_char(XDR *\fP\fIxdrs\fP\fB, char *\fP\fIcp\fP\fB);\fP
67 C の文字(char)とその外部表現との間を変換する基本フィルター。 このルーティンは成功した場合には 1 を返す。 失敗した場合には 0 を返す。
68 注意: エンコードされたデータは詰め込まれておらず、それぞれ 4 バイトを 占める。文字の配列の場合には \fBxdr_bytes\fP(),
69 \fBxdr_opaque\fP(), \fBxdr_string\fP() などを考慮した方が良い。
72 \fBvoid xdr_destroy(XDR *\fP\fIxdrs\fP\fB);\fP
75 このマクロは XDR ストリーム \fIxdrs\fP に関連付けられた破壊ルーティンを呼び出す。
76 破壊には通常、ストリームに関連付けられた私的データ構造体の解放が含まれている。 \fBxdr_destroy\fP() の呼び出しの後に \fIxdrs\fP
80 \fBbool_t xdr_double(XDR *\fP\fIxdrs\fP\fB, double *\fP\fIdp\fP\fB);\fP
83 C の \fI倍精度数 (double)\fP とその外部表現との変換を行なう基本フィルター。 このルーティンは成功した場合は 1 を返す。 失敗した場合は
87 \fBbool_t xdr_enum(XDR *\fP\fIxdrs\fP\fB, enum_t *\fP\fIep\fP\fB);\fP
90 C の \fIenum\fP (実際には int)とその外部表現との変換を行なう基本フィルター。 このルーティンは成功した場合は 1 を返す。 失敗した場合は
94 \fBbool_t xdr_float(XDR *\fP\fIxdrs\fP\fB, float *\fP\fIfp\fP\fB);\fP
97 C の \fI浮動小数点数 (float)\fP とその外部表現との変換を行なう基本フィルター。 このルーティンは成功した場合は 1 を返す。 失敗した場合は
101 \fBvoid xdr_free(xdrproc_t \fP\fIproc\fP\fB, char *\fP\fIobjp\fP\fB);\fP
104 汎用解放(free)ルーティン。最初の引き数はオブジェクトを解放するための XDR ルーティンである。二番目の引き数はそのオブジェクト自身へのポインター
105 である。注意: このルーティンに渡されるポインターは \fI解放されない\fP が、このポインターの指すデータは(再帰的に) \fI解放される\fP。
108 \fBunsigned int xdr_getpos(XDR *\fP\fIxdrs\fP\fB);\fP
111 このマクロは XDR ストリーム \fIxdrs\fP に関連付けられた位置取得ルーティンを呼び出す。 このルーティンは XDR
112 バイト・ストリームの位置を指示する符号無し整数を返す。 XDR ストリームの機能としてこの数値で単純な算術作業ができることが
113 期待されてるいる。しかしながら XDR ストリームの実体はこれを保証する必要はない。
116 \fBlong *xdr_inline(XDR *\fP\fIxdrs\fP\fB, int \fP\fIlen\fP\fB);\fP
119 このマクロは XDR ストリーム \fIxdrs\fP に関連付けられた内部(inline)ルーティンを呼び出す。
120 ルーティンはストリームのバッファーの連続する断片へのポインターを返す。 \fIlen\fP は要求するバッファーのバイト長である。 注意: ポインターは
121 \fIlong *\fP にキャストされる。
123 警告: \fBxdr_inline\fP() はバッファーの連続する断片を割り当てることができなかった場合には NULL (0)を返すかもしれない。
124 どの場合もその動作はストリームの実体によって変化するかもしれない。 これは効率化のために存在している。
127 \fBbool_t xdr_int(XDR *\fP\fIxdrs\fP\fB, int *\fP\fIip\fP\fB);\fP
130 C の整数(int)とその外部表現とを変換するための基本フィルター。 このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
133 \fBbool_t xdr_long(XDR *\fP\fIxdrs\fP\fB, long *\fP\fIlp\fP\fB);\fP
136 C の \fIlong\fP 整数とそのその外部表現とを変換するための基本フィルター。 このルーティンは成功した場合は 1 を返す。
140 \fBvoid xdrmem_create(XDR *\fP\fIxdrs\fP\fB, char *\fP\fIaddr\fP\fB, unsigned int \fP\fIsize\fP\fB,\fP
141 \fB enum xdr_op \fP\fIop\fP\fB);\fP
144 このルーティンは \fIxdrs\fP によって指されている XDR ストリーム・オブジェクトを初期化する。 ストリームのデータは \fIaddr\fP
145 位置にあるメモリーの塊から読み書きされる。 その長さはバイト単位で \fIsize\fP 超えてはいけない。 \fIop\fP は XDR
146 ストリームの変換方向を決定する (\fBXDR_ENCODE\fP, \fBXDR_DECODE\fP, \fBXDR_FREE\fP のどれか)。
149 \fBbool_t xdr_opaque(XDR *\fP\fIxdrs\fP\fB, char *\fP\fIcp\fP\fB, unsigned int \fP\fIcnt\fP\fB);\fP
152 固定長の不明データとその外部表現との変換を行なう基本フィルター。 引き数 \fIcp\fP は不明オブジェクトのアドレスであり \fIcnt\fP
153 はそのバイト単位の大きさである。 このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
156 \fBbool_t xdr_pointer(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIobjpp\fP\fB,\fP
157 \fB unsigned int \fP\fIobjsize\fP\fB, xdrproc_t \fP\fIxdrobj\fP\fB);\fP
160 \fBxdr_reference\fP() と同様であるが、これが NULL ポインターを番号化するのに対して \fBxdr_reference\fP()
161 はそうしない点が異なっている。これにより、 \fBxdr_pointer\fP() は二分木や連結リストのような再帰的なデータ構造体を 表現できる。
164 \fBvoid xdrrec_create(XDR *\fP\fIxdrs\fP\fB, unsigned int \fP\fIsendsize\fP\fB,\fP
165 \fB unsigned int \fP\fIrecvsize\fP\fB, char *\fP\fIhandle\fP\fB,\fP
166 \fB int (*\fP\fIreadit\fP\fB) (char *, char *, int),\fP
167 \fB int (*\fP\fIwriteit\fP\fB) (char *, char *, int));\fP
170 このルーティンは \fIxdrs\fP で指された XDR ストリーム・オブジェクトを初期化する。 ストリームのデータは大きさ \fIsendsize\fP
171 のバッファへ書き込まれる。 \fIsendsize\fP をゼロにすると、システムに適切なデフォルトを使用するように指示する。 ストリームのデータは大きさ
172 \fIrecvsize\fP のバッファから読み込まれる。これもゼロを渡すことで適切なデフォルトに 設定することができる。
173 ストリームの出力バッファが一杯の場合は \fIwriteit\fP が呼び出される。同様にストリーム入力バッファが空の場合には \fIreadit\fP
174 が呼び出される。これらの二つのルーティンの動作はシステムコールの \fBread\fP(2) や \fBwrite\fP(2)
175 と似ているが、前者のルーティンは最初の引き数として \fIhandle\fP が渡される点で異なっている。 注意: XDR ストリームの \fIop\fP
178 警告: この XDR ストリームは中間レコード・ストリームを実装している。 レコード境界の情報を提供するためにストリームには余分なバイトが存在する。
181 \fBbool_t xdrrec_endofrecord(XDR *\fP\fIxdrs\fP\fB, int \fP\fIsendnow\fP\fB);\fP
184 このルーティンは \fBxdrrec_create\fP() によって作成されたストリームに対してのみ呼び出すことができる。
185 出力バッファのデータは完全なレコードとして印され、 \fIsendnow\fP がゼロでない場合には出力バッファは書き出される。
186 このルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。
189 \fBbool_t xdrrec_eof(XDR *\fP\fIxdrs\fP\fB);\fP
192 このルーティンは \fBxdrrec_create\fP() によって作成されたストリームに対してのみ呼び出すことができる。
193 ストリームの現在のレコードの残りを消費した後に、 ストリームに入力が残っていない場合には 1 を返す。 それ以外の場合はゼロを返す。
196 \fBbool_t xdrrec_skiprecord(XDR *\fP\fIxdrs\fP\fB);\fP
199 このルーティンは \fBxdrrec_create\fP() によって作成されたストリームに対してのみ呼び出すことができる。 XDR
200 の実装にそのストリームの入力バッファーの現在のレコードの残りを 捨てるように伝える。このルーティンは成功した場合は 1 を返す。
204 \fBbool_t xdr_reference(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIpp\fP\fB, unsigned int \fP\fIsize\fP\fB,\fP
205 \fB xdrproc_t \fP\fIproc\fP\fB);\fP
208 構造体へのポインター追跡を提供する基本ルーティン。 引き数 \fIpp\fP はポインターのアドレスである。 \fIsize\fP は \fI*pp\fP
209 が指している構造体の \fIsizeof\fP である。 \fIproc\fP はその構造体の C 形式と外部表現との変換を行なう XDR プロシジャである。
210 このルーティンは成功した場合 1 を返す。 失敗した場合はゼロを返す。
212 警告: このルーティンは NULL ポインターを理解することができない。かわりに \fBxdr_pointer\fP() を使用すること。
215 \fBxdr_setpos(XDR *\fP\fIxdrs\fP\fB, unsigned int \fP\fIpos\fP\fB);\fP
218 このマクロは XDR ストリーム \fIxdrs\fP に関連付けられた位置設定ルーティンを呼び出す。引き数 \fIpos\fP は \fBxdr_getpos\fP()
219 によって取得される位置数値である。 このルーティンは XDR ストリームの位置の変更ができた場合には 1 を返す。 それ以外の場合は 0 を返す。
221 警告: ある種の XDR ストリームの場合は位置の変更を行なうことが困難である。 それでこのルーティンはある種のストリームの場合には成功し、別の種類の
225 \fBbool_t xdr_short(XDR *\fP\fIxdrs\fP\fB, short *\fP\fIsp\fP\fB);\fP
228 C の \fIshort\fP 整数とその外部表現との変換を行なう基本フィルター。 このルーティンは成功すると 1 を返す。 失敗した場合はゼロを返す。
231 \fBvoid xdrstdio_create(XDR *\fP\fIxdrs\fP\fB, FILE *\fP\fIfile\fP\fB, enum xdr_op \fP\fIop\fP\fB);\fP
234 このルーティンは \fIxdrs\fP で指された XDR ストリーム・オブジェクトを初期化する。 XDR ストリームに読み書きれたデータは \fIstdio\fP
235 ストリーム \fIfile\fP が使用される。 \fIop\fP 引き数は XDR ストリームの変換方向を決定する (\fBXDR_ENCODE\fP,
236 \fBXDR_DECODE\fP, \fBXDR_FREE\fP のどれか)。
238 警告: このような XDR ストリームに関連付けられた破壊ルーティンは \fIfile\fP ストリームに対して \fBfflush\fP(3) を呼び出すが
239 \fBfclose\fP(3) を呼び出すことはない。
242 \fBbool_t xdr_string(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIsp\fP\fB, unsigned int \fP\fImaxsize\fP\fB);\fP
245 C の文字列とそれに対応する外部表現とを変換するための基本フィルター。 文字列は \fImaxsize\fP より長くはできない。 注意: \fIsp\fP
246 は文字列へのポインターのアドレスである。 このルーティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。
249 \fBbool_t xdr_u_char(XDR *\fP\fIxdrs\fP\fB, unsigned char *\fP\fIucp\fP\fB);\fP
252 C の \fI符号無し文字 (unsigned char)\fP とその外部表現とを変換する基本フィルター。 このルーティンは成功した場合は 1 を返す。
256 \fBbool_t xdr_u_int(XDR *\fP\fIxdrs\fP\fB, unsigned *\fP\fIup\fP\fB);\fP
259 C の \fI符号無し整数 (unsigned)\fP とその外部表現を変換するための基本フィルター。 このルーティンは成功した場合は 1 を返す。
263 \fBbool_t xdr_u_long(XDR *\fP\fIxdrs\fP\fB, unsigned long *\fP\fIulp\fP\fB);\fP
266 C の \fIunsigned long\fP 整数とその外部表現を変換するための基本フィルター。 このルーティンは成功した場合は 1 を返す。
270 \fBbool_t xdr_u_short(XDR *\fP\fIxdrs\fP\fB, unsigned short *\fP\fIusp\fP\fB);\fP
273 C の \fIunsigned short\fP 整数とその外部表現を変換するための基本フィルター。 このルーティンは成功した場合は 1 を返す。
277 \fBbool_t xdr_union(XDR *\fP\fIxdrs\fP\fB, int *\fP\fIdscmp\fP\fB, char *\fP\fIunp\fP\fB,\fP
278 \fB struct xdr_discrim *\fP\fIchoices\fP\fB,\fP
279 \fB xdrproc_t \fP\fIdefaultarm\fP\fB); /* may equal NULL */\fP
282 分別可能な C の \fI共用体 (union)\fP とその外部形式とを変換する基本フィルター。 最初に \fIdscmp\fP
283 として与えられた共用体の分別要素が変換される。 この分別要素は常に \fIenum_t\fP である。 次に \fIunp\fP の位置の共用体が変換される。引き数
284 \fIchoices\fP は \fBxdr_discrim\fP() 構造体の配列へのポインターである。各構造体は [\fIvalue\fP,\fIproc\fP]
285 の順序付きペアを格納している。 もし共用体の分別要素が関連付けられた \fIvalue\fP と等しい場合には、共用体を変換するために \fIproc\fP
286 が呼び出される。 \fBxdr_discrim\fP() 構造体の配列の最後は、値 NULL のルーティン を指定することで示される。 分別要素が
287 \fIchoices\fP 配列の中に見つからなかった場合、 \fIdefaultarm\fP が (NULL でなければ) 呼び出される。 成功した場合は 1
291 \fBbool_t xdr_vector(XDR *\fP\fIxdrs\fP\fB, char *\fP\fIarrp\fP\fB, unsigned int \fP\fIsize\fP\fB,\fP
292 \fB unsigned int \fP\fIelsize\fP\fB, xdrproc_t \fP\fIelproc\fP\fB);\fP
295 固定長の配列とそれらが対応する外部表現とを変換する基本フィルター。 引き数 \fIarrp\fP は配列へのポインターのアドレスである。一方で \fIsize\fP
296 は配列の要素数そのものである。引き数 \fIelsize\fP は配列の各要素の \fIsizeof\fP で、 \fIelproc\fP は配列の要素を C
297 形式からその外部表現へと変換する XDR フィルターである。 このルーティンは成功した場合 1 を返す。 失敗した場合はゼロを返す。
300 \fBbool_t xdr_void(void);\fP
303 このルーティンは常に 1 を返す。 これは何も行なわないが、関数引き数が必要な RPC ルーティンに渡すことができる。
306 \fBbool_t xdr_wrapstring(XDR *\fP\fIxdrs\fP\fB, char **\fP\fIsp\fP\fB);\fP
309 \fBxdr_string(xdrs, sp, \s-1MAXUN.UNSIGNED\s0 );\fP を呼び出す基本ルーティン。 ここで
310 \fBMAXUN.UNSIGNED\fP は符号無し整数(unsigned int)の最大値である。 \fBxdr_wrapstring\fP() は、 RPC
311 パッケージは二つの XDR ルーティンの最大値を引き数として渡すため便利である。 \fBxdr_string\fP()
312 は最も頻繁に利用される基本ルーティンであるが三つを要求する。 成功した場合は 1 を返す、失敗した場合はゼロを返す。
318 eXternal Data Representation Standard: Protocol Specification
320 eXternal Data Representation: Sun Technical Notes
322 \fIXDR: External Data Representation Standard\fP, RFC\ 1014, Sun Microsystems,
326 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
327 である。プロジェクトの説明とバグ報告に関する情報は
328 http://www.kernel.org/doc/man\-pages/ に書かれている。