Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all bug

名前

       xdr - 外部データ表現(XDR)のためのライブラリルーティン

書式と説明

       これらのルーティンは  C プログラマーがマシン非依存な形式で 任意のデータ構造体を記述することを可能にする。
       リモートプロシージャーコールのためのデータはこれらのルーティンを 使用して送信される。

       以下に示すプロトタイプ宣言は <rpc/xdr.h> で行われており、その中では次の型が使用される。

           typedef int bool_t;

           typedef bool_t (*xdrproc_t) (XDR *, void *,...);

       XDR 型の宣言については、 <rpc/xdr.h> を参照。

       bool_t xdr_array(XDR *xdrs, char **arrp, unsigned int *sizep,
                        unsigned int maxsize, unsigned int elsize,
                        xdrproc_t elproc);

              可変長の配列とそれに対応する外部表現とを変換する基本フィルター。 引き数 arrp  は配列へのポインター
              のアドレスであり、  sizep は配列の要素数のアドレスである。 これらの要素数は maxsize を超えてはなら
              ない。 引き数 elsize は各配列の要素の sizeof であり、 elproc は配列要素を C 形式からその外部表現に
              変換するための XDR フィルターである。 このルーティンは成功した場合には 1 を返す。 失敗した場合には
              ゼロを返す。

       bool_t xdr_bool(XDR *xdrs, bool_t *bp);

              真偽値(C  の  int)とその外部表現とを変換する基本フィルター。  データをエンコードする時、このフィル
              ターは 1 また 0 の値を生成する。 このルーティンは成功した場合には 1 を返す。 失敗した場合には 0 を
              返す。

       bool_t xdr_bytes(XDR *xdrs, char **sp, unsigned int *sizep,
                        unsigned int maxsize);

              ある長さのバイト文字列とその外部表現とを変換する基本フィルター。 引き数 sp  は文字列ポインターのア
              ドレスである。文字列の長さは  sizep のアドレスに置く。文字列は maxsize より長くてはいけない。 この
              ルーティンは成功した場合には 1 を返す。 失敗した場合には 0 を返す。

       bool_t xdr_char(XDR *xdrs, char *cp);

              C の文字(char)とその外部表現との間を変換する基本フィルター。 このルーティンは成功した場合には 1 を
              返す。 失敗した場合には 0 を返す。 注意: エンコードされたデータは詰め込まれておらず、それぞれ 4 バ
              イトを 占める。文字の配列の場合には xdr_bytes(), xdr_opaque(), xdr_string()   などを考慮した方が良
              い。

       void xdr_destroy(XDR *xdrs);

              このマクロは XDR ストリーム xdrs に関連付けられた破壊ルーティンを呼び出す。 破壊には通常、ストリー
              ムに関連付けられた私的データ構造体の解放が含まれている。 xdr_destroy()  の呼び出しの後に xdrs を使
              用することは未定義である。

       bool_t xdr_double(XDR *xdrs, double *dp);

              C の 倍精度数 (double) とその外部表現との変換を行なう基本フィルター。 このルーティンは成功した場合
              は 1 を返す。 失敗した場合は 0 を返す。

       bool_t xdr_enum(XDR *xdrs, enum_t *ep);

              C の enum (実際には int)とその外部表現との変換を行なう基本フィルター。  このルーティンは成功した場
              合は 1 を返す。 失敗した場合は 0 を返す。

       bool_t xdr_float(XDR *xdrs, float *fp);

              C  の 浮動小数点数 (float) とその外部表現との変換を行なう基本フィルター。 このルーティンは成功した
              場合は 1 を返す。 失敗した場合は 0 を返す。

       void xdr_free(xdrproc_t proc, char *objp);

              汎用解放(free)ルーティン。最初の引き数はオブジェクトを解放するための XDR  ルーティンである。二番目
              の引き数はそのオブジェクト自身へのポインター である。注意: このルーティンに渡されるポインターは 
              放されない が、このポインターの指すデータは(再帰的に)  解放されるunsigned int xdr_getpos(XDR *xdrs);

              このマクロは XDR ストリーム xdrs  に関連付けられた位置取得ルーティンを呼び出す。  このルーティンは
              XDR  バイトストリームの位置を指示する符号無し整数を返す。 XDR ストリームの機能としてこの数値で単純
              な算術作業ができることが 期待されてるいる。しかしながら XDR ストリームの実体はこれを保証する必要は
              ない。

       long *xdr_inline(XDR *xdrs, int len);

              このマクロは XDR ストリーム xdrs に関連付けられた内部(inline)ルーティンを呼び出す。 ルーティンはス
              トリームのバッファーの連続する断片へのポインターを返す。  len   は要求するバッファーのバイト長であ
              る。 注意: ポインターは long * にキャストされる。

              警告:  xdr_inline()  はバッファーの連続する断片を割り当てることができなかった場合には NULL (0)を返
              すかもしれない。 どの場合もその動作はストリームの実体によって変化するかもしれない。 これは効率化の
              ために存在している。

       bool_t xdr_int(XDR *xdrs, int *ip);

              C  の整数(int)とその外部表現とを変換するための基本フィルター。 このルーティンは成功した場合は 1 を
              返す。 失敗した場合はゼロを返す。

       bool_t xdr_long(XDR *xdrs, long *lp);

              C の long 整数とそのその外部表現とを変換するための基本フィルター。  このルーティンは成功した場合は
              1 を返す。 失敗した場合はゼロを返す。

       void xdrmem_create(XDR *xdrs, char *addr, unsigned int size,
                          enum xdr_op op);

              このルーティンは  xdrs  によって指されている XDR ストリームオブジェクトを初期化する。 ストリームの
              データは addr 位置にあるメモリーの塊から読み書きされる。 その長さはバイト単位で size  超えてはいけ
              ない。 op は XDR ストリームの変換方向を決定する (XDR_ENCODE, XDR_DECODE, XDR_FREE のどれか)。

       bool_t xdr_opaque(XDR *xdrs, char *cp, unsigned int cnt);

              固定長の不明データとその外部表現との変換を行なう基本フィルター。  引き数 cp は不明オブジェクトのア
              ドレスであり cnt はそのバイト単位の大きさである。 このルーティンは成功した場合は 1 を返す。 失敗し
              た場合はゼロを返す。

       bool_t xdr_pointer(XDR *xdrs, char **objpp,
                          unsigned int objsize, xdrproc_t xdrobj);

              xdr_reference()  と同様であるが、これがヌルポインターを番号化するのに対して xdr_reference() はそう
              しない点が異なっている。これにより、 xdr_pointer()  は二分木や連結リストのような再帰的なデータ構造
              体を 表現できる。

       void xdrrec_create(XDR *xdrs, unsigned int sendsize,
                          unsigned int recvsize, char *handle,
                          int (*readit) (char *, char *, int),
                          int (*writeit) (char *, char *, int));

              このルーティンは xdrs で指された XDR ストリームオブジェクトを初期化する。 ストリームのデータは大き
              さ sendsize のバッファーへ書き込まれる。 sendsize をゼロにすると、システムに適切なデフォルトを使用
              するように指示する。  ストリームのデータは大きさ recvsize のバッファーから読み込まれる。これもゼロ
              を渡すことで適切なデフォルトに   設定することができる。   ストリームの出力バッファーが一杯の場合は
              writeit が呼び出される。同様にストリーム入力バッファーが空の場合には readit が呼び出される。これら
              の二つのルーティンの動作はシステムコールの read(2)  や write(2) と似ているが、前者のルーティンは最
              初の引き数として  handle が渡される点で異なっている。 注意: XDR ストリームの op は呼び出し側で設定
              しなければならない。

              警告: この XDR ストリームは中間レコードストリームを実装している。 レコード境界の情報を提供するため
              にストリームには余分なバイトが存在する。

       bool_t xdrrec_endofrecord(XDR *xdrs, int sendnow);

              このルーティンは  xdrrec_create()   によって作成されたストリームに対してのみ呼び出すことができる。
              出力バッファーのデータは完全なレコードとして印され、 sendnow  がゼロでない場合には出力バッファーは
              書き出される。 このルーティンは成功した場合は 1 を返す。失敗した場合はゼロを返す。

       bool_t xdrrec_eof(XDR *xdrs);

              このルーティンは  xdrrec_create()   によって作成されたストリームに対してのみ呼び出すことができる。
              ストリームの現在のレコードの残りを消費した後に、 ストリームに入力が残っていない場合には 1 を返す。
              それ以外の場合はゼロを返す。

       bool_t xdrrec_skiprecord(XDR *xdrs);

              このルーティンは  xdrrec_create()   によって作成されたストリームに対してのみ呼び出すことができる。
              XDR  の実装にそのストリームの入力バッファーの現在のレコードの残りを   捨てるように伝える。このルー
              ティンは成功した場合は 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_reference(XDR *xdrs, char **pp, unsigned int size,
                            xdrproc_t proc);

              構造体へのポインター追跡を提供する基本ルーティン。  引き数  pp はポインターのアドレスである。 size*pp が指している構造体の sizeof である。 proc はその構造体の  C  形式と外部表現との変換を行なう
              XDR プロシージャーである。 このルーティンは成功した場合 1 を返す。 失敗した場合はゼロを返す。

              警告: このルーティンはヌルポインターを理解することができない。かわりに xdr_pointer()  を使用するこ
              と。

       xdr_setpos(XDR *xdrs, unsigned int pos);

              このマクロは  XDR  ストリーム  xdrs  に関連付けられた位置設定ルーティンを呼び出す。引き数  posxdr_getpos()  によって取得される位置数値である。 このルーティンは XDR ストリームの位置の変更ができ
              た場合には 1 を返す。 それ以外の場合は 0 を返す。

              警告: ある種の XDR ストリームの場合は位置の変更を行なうことが困難である。 それでこのルーティンはあ
              る種のストリームの場合には成功し、別の種類の 場合には失敗するかもしれない。

       bool_t xdr_short(XDR *xdrs, short *sp);

              C  の  short  整数とその外部表現との変換を行なう基本フィルター。 このルーティンは成功すると 1 を返
              す。 失敗した場合はゼロを返す。

       void xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op);

              このルーティンは xdrs で指された XDR ストリームオブジェクトを初期化する。 XDR ストリームに読み書き
              れたデータは  stdio  ストリーム file が使用される。 op 引き数は XDR ストリームの変換方向を決定する
              (XDR_ENCODE, XDR_DECODE, XDR_FREE のどれか)。

              警告: このような XDR ストリームに関連付けられた破壊ルーティンは file ストリームに対して  fflush(3)
              を呼び出すが fclose(3)  を呼び出すことはない。

       bool_t xdr_string(XDR *xdrs, char **sp, unsigned int maxsize);

              C の文字列とそれに対応する外部表現とを変換するための基本フィルター。 文字列は maxsize より長くはで
              きない。 注意: sp は文字列へのポインターのアドレスである。 このルーティンは成功した場合は  1  を返
              す。 失敗した場合はゼロを返す。

       bool_t xdr_u_char(XDR *xdrs, unsigned char *ucp);

              C  の 符号無し文字 (unsigned char) とその外部表現とを変換する基本フィルター。 このルーティンは成功
              した場合は 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_u_int(XDR *xdrs, unsigned *up);

              C の 符号無し整数 (unsigned) とその外部表現を変換するための基本フィルター。 このルーティンは成功し
              た場合は 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_u_long(XDR *xdrs, unsigned long *ulp);

              C の unsigned long 整数とその外部表現を変換するための基本フィルター。 このルーティンは成功した場合
              は 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_u_short(XDR *xdrs, unsigned short *usp);

              C の unsigned short 整数とその外部表現を変換するための基本フィルター。  このルーティンは成功した場
              合は 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_union(XDR *xdrs, int *dscmp, char *unp,
                        struct xdr_discrim *choices,
                        xdrproc_t defaultarm);     /* may equal NULL */

              分別可能な  C の 共用体 (union) とその外部形式とを変換する基本フィルター。 最初に dscmp として与え
              られた共用体の分別要素が変換される。 この分別要素は常に enum_t である。 次に unp  の位置の共用体が
              変換される。引き数    choicesxdr_discrim()    構造体の配列へのポインターである。各構造体は
              [value,proc] の順序付きペアを格納している。 もし共用体の分別要素が関連付けられた value  と等しい場
              合には、共用体を変換するために  proc が呼び出される。 xdr_discrim()  構造体の配列の最後は、値 NULL
              のルーティン  を指定することで示される。   分別要素が   choices   配列の中に見つからなかった場合、
              defaultarm が (NULL でなければ) 呼び出される。 成功した場合は 1 を返す。失敗した場合はゼロを返す。

       bool_t xdr_vector(XDR *xdrs, char *arrp, unsigned int size,
                         unsigned int elsize, xdrproc_t elproc);

              固定長の配列とそれらが対応する外部表現とを変換する基本フィルター。  引き数  arrp  は配列へのポイン
              ターのアドレスである。一方で  size  は配列の要素数そのものである。引き数  elsize  は配列の各要素の
              sizeof  で、  elproc は配列の要素を C 形式からその外部表現へと変換する XDR フィルターである。 この
              ルーティンは成功した場合 1 を返す。 失敗した場合はゼロを返す。

       bool_t xdr_void(void);

              このルーティンは常に 1 を返す。 これは何も行なわないが、関数引き数が必要な RPC  ルーティンに渡すこ
              とができる。

       bool_t xdr_wrapstring(XDR *xdrs, char **sp);

              xdr_string(xdrs, sp, MAXUN.UNSIGNED ); を呼び出す基本ルーティン。 ここで MAXUN.UNSIGNED は符号無し
              整数(unsigned int)の最大値である。 xdr_wrapstring()  は、 RPC パッケージは二つの XDR  ルーティンの
              最大値を引き数として渡すため便利である。 xdr_string() は最も頻繁に利用される基本ルーティンであるが
              三つを要求する。 成功した場合は 1 を返す、失敗した場合はゼロを返す。

関連項目

       rpc(3)

       以下のマニュアル:
              eXternal Data Representation Standard: Protocol Specification
              eXternal Data Representation: Sun Technical Notes
              XDR: External Data Representation Standard, RFC 1014, Sun Microsystems, Inc., USC-ISI.

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告
       に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

                                                   2007-12-30                                             XDR(3)