名前


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

書式と説明


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

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

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

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

xdr_bytes(xdrs, sp, sizep, maxsize) XDR *xdrs; char **sp; u_int *sizep, maxsize;

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

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

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

void xdr_destroy(xdrs) XDR *xdrs;

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

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

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

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

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

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

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

void xdr_free(proc, objp) xdrproc_t proc; char *objp;

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

u_int xdr_getpos(xdrs) XDR *xdrs;

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

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

このマクロは XDR ストリーム xdrs に関連付けられた内部(inline)ルーティンを呼び出す。 ルーティンはストリームのバッファーの連続する断片へのポインターを返す。 len は要求するバッファーのバイト長である。 注意: ポインターは long * にキャストされる。
警告: xdr_inline() はバッファーの連続する断片を割り当てることができなかった場合には NULL (0)を返すかもしれない。 どの場合もその動作はストリームの実体によって変化するかもしれない。 これは効率化のために存在している。

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

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

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

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

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

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

xdr_opaque(xdrs, cp, cnt) XDR *xdrs; char *cp; u_int cnt;

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

xdr_pointer(xdrs, objpp, objsize, xdrobj) XDR *xdrs; char **objpp; u_int objsize; xdrproc_t xdrobj;

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

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

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

xdrrec_endofrecord(xdrs, sendnow) XDR *xdrs; int sendnow;

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

xdrrec_eof(xdrs) XDR *xdrs; int empty;

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

xdrrec_skiprecord(xdrs) XDR *xdrs;

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

xdr_reference(xdrs, pp, size, proc) XDR *xdrs; char **pp; u_int size; xdrproc_t proc;

構造体へのポインター追跡を提供する基本ルーティン。 パラメーター pp はポインターのアドレスである。 size*pp が指している構造体の sizeof である。 proc はその構造体の C 形式と外部表現との変換を行なう XDR プロシジャである。 このルーティンは成功した場合 1 を返す。 失敗した場合はゼロを返す。
警告: このルーティンは NULL ポインターを理解することができない。かわりに xdr_pointer() を使用すること。

xdr_setpos(xdrs, pos) XDR *xdrs; u_int pos;

このマクロは XDR ストリーム xdrs に関連付けられた位置設定ルーティンを呼び出す。パラメータ posxdr_getpos() によって取得される位置数値である。 このルーティンは XDR ストリームの位置の変更ができた場合には 1 を返す。 それ以外の場合は 0 を返す。
警告: ある種の XDR ストリームの場合は位置の変更を行なうことが困難である。それで このルーティンはある種のストリームの場合には成功し、別の種類の 場合には失敗するかもしれない。

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

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

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

このルーティンは xdrs で指された XDR ストリーム・オブジェクトを初期化する。 XDR ストリームに読み書きれたデータは標準 I/O ストリーム file が使用される。 op パラメータは XDR ストリームの変換方向を決定する。( XDR_ENCODE, XDR_DECODE, XDR_FREE のどれか。)
警告: このような XDR ストリームに関連付けられた破壊ルーティンは file ストリームに対して fflush(3) を呼び出すが fclose(3) を呼び出すことはない。

xdr_string(xdrs, sp, maxsize) XDR *xdrs; char **sp; u_int maxsize;

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

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

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

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

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

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

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

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

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

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

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

xdr_vector(xdrs, arrp, size, elsize, elproc) XDR *xdrs; char *arrp; u_int size, elsize; xdrproc_t elproc;

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

xdr_void()

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

xdr_wrapstring(xdrs, sp) 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.

openSUSE Logo

コンテンツ