スポンサーリンク

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 形式と外部表現とを 相互に変換する XDR フィルタです。このルーチンは、成功す れ ば 1 を、失敗すれば 0 を返します。

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

ブール値 (C 言語整数) とその外部表現とを相互に変換するフィルタプ リミティブです。データをコード化するときは、このフィルタは 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 言語のキャラクタとその外部表現とを相互に変換するフィルタプリミ ティブです。このルーチンは、成功すれば 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 (実際は整数) とその外部表現とを相互に変換するフィ ルタプリミティブです。このルーチンは、成功すれば 1 を、失敗す れ ば 0 を返します。

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

C 言 語の float とその外部表現とを相互に変換するフィルタプリミ ティブです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返し ます。

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

ジェネリックな解放ルーチンです。最初の引数は、解放するオブジェク トの XDR ルーチンです。2 番目の引数は、そのオブジェクト自体へ の ポインタです。注:このルーチンに渡されるポインタは解放されません が、それが指すものは解放 (反復的に) されます。

u_int
xdr_getpos(xdrs)
XDR *xdrs;

XDR ストリーム xdrs に結合された位置検索ルーチンを呼び出すマクロ で す。このルーチンは、 XDR バイトストリームの位置を示す符号なし の整数を返します。 XDR ストリームのよいところは、 XDR ストリーム インスタンスがそれを保証しているとは限らない場合であっても、この 数字に対して簡単な算術計算が使えることです。

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

XDR ストリーム xdrs に結合されたインラインルーチンを呼び出すマク ロです。このルーチンは、ストリームのバッファの連続した部分へのポ インタを返します。 len は、希望するバッファのバイト長です。 注: ポインタは long * にキャストされます。

警 告: xdr_inline() は、連続するバッファの部分を割り当てられない 場合は、 NULL (0) を返すことがあります。従って、ストリームインス タンスによって挙動が異なる場合があります。このルーチンは、効率を 上げるために用意されています。

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

C 言語の整数とその外部表現とを相互に変換するフィルタプリミティブ です。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

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

C 言語の長整数 ( long ) とその外部表現とを相互に変換するフィルタ プ リミティブです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

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

このルーチンは、 xdrs によって指される XDR ストリームオブジェ ク トを初期化します。ストリームのデータは、長さが size バイトを超え ない addr の位置にあるメモリに書込まれるか、またはそこから読み出 さ れ ま す。 op は、 XDR ス ト リームの方向 ( XDR_ENCODE , XDR_DECODE , XDR_FREE のいずれか) を決定します。

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

固定サイズの不透明 (opaque) データとその外部表現とを相互に変換す るフィルタプリミティブです。パラメータ cp は不透明データのアドレ スであり、 cnt はそのサイズをバイトで表したものです。このルー チ ンは、成功すれば 1 を、失敗すれば 0 を返します。

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 のバッファ に書込まれ、値 0 はシステムが適切なデフォルトを使う必要がある こ とを示します。ストリームのデータは、サイズ recvsize のバッファか ら読み込まれ、このルーチンも値 0 を渡すことによって適切なデ フォ ルトを設定することができます。ストリームの出力バッファが一杯のと きは、 writeit が呼ばれます。同様に、ストリームの入力バッファ が 空 のときは、 readit が呼ばれます。これらの 2 つのルーチンの挙動 は、システムコール read, write と似ています。但し、 read には 最 初 のパラメータとして handle が渡されることが異なります。注: XDR ストリームの op フィールドは、呼び出し元が設定しなければなりませ ん。

警 告: この XDR ストリームは、中間レコードストリームを実装してい ます。従って、ストリームにはレコードの境界情報を与える追加バイト が入っています。

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

こ のルーチンは、 xdrrec_create() によって作成されたストリームに ついてのみ呼び出すことができます。出力バッファにあるデータは完全 なレコードとしてマークされ、出力バッファは sendnow が 0 でない場 合はオプションで書き出されます。このルーチンは、成功 す れ ば 1 を、失敗すれば 0 を返します。

xdrrec_eof(xdrs)
XDR *xdrs;
int empty;

こ のルーチンは、 xdrrec_create() によって作成されたストリームに ついてのみ呼び出すことができます。ストリーム中の現在のレコードの 残りの部分を処理した後に、このルーチンはストリームにそれ以上の入 力がない場合は 1 を返し、ある場合は 0 を返します。

xdrrec_skiprecord(xdrs)
XDR *xdrs;

このルーチンは、 xdrrec_create() によって作成されたストリーム に つ い て のみ呼び出すことができます。これは、 XDR のインプリメン テーションに対して、ストリームの入力バッファにある現在のレコード の残りの部分を廃棄するように指示します。このルーチンは、成功すれ ば 1 を、失敗すれば 0 を返します。

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

構造体の中を追いかけるポインタを与えるプリミティブです。パラメー タ pp はポインタのアドレス、 size*pp が指す構造体のサイズ、 proc は構造体をその C 言語形式と外部表現との間でフィルタする XDR プ ロシージャです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

警告: このルーチンは  NULL ポインタを理解し ま せ ん。 代 り に xdr_pointer() を使ってください。

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

XDR ストリーム xdrs に結合された位置設定ルーチンを呼び出すマクロ です。パラメータ pos は、 xdr_getpos() から取得した位置を示す 値 で す。このルーチンは、 XDR ストリームの位置を再設定できる場合は 1 を、そうでない場合は 0 を返します。

警告: XDR ストリームの種類によっては、再設定は困難です。従って、 このルーチンはある種類のストリームには成功し、別の種類のストリー ムには失敗する場合があります。

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

C 言語の短整数 ( short ) とその外部表現とを相互に変換するフィ ル タ プリミティブです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

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() は呼び出しますが、 fclose() は決して 呼び出しません。

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

C 言語の文字列とそれに対応する外部表現とを相互に変換するフィルタ プ リミティブです。文字列の長さは maxsize を超えることはできませ ん。注: sp は、ストリングのポインタのアドレスです。このルーチ ン は、成功すれば 1 を、失敗すれば 0 を返します。

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

符 号 な しの C 言語のキャラクタとその外部表現とを相互に変換する フィルタプリミティブです。このルーチンは、成功すれば 1 を、失 敗 すれば 0 を返します。

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

C 言語の符号なし整数 ( unsigned ) とその外部表現とを相互に変換す るフィルタプリミティブです。このルーチンは成功すれば 1 を、失 敗 すれば 0 を返します。

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

C 言語の符号なし長整数 ( unsigned long ) とその外部表現とを相互 に変換するフィルタプリミティブです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

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

C 言語の符号なし短整数 ( unsigned short ) とその外部表現とを相互 に変換するフィルタプリミティブです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。

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

ディスクリミナントで識別された C 言語の共用体 ( union ) とそれに 対応する外部表現とを相互に変換するフィルタプリミティブです。まず 最 初に dscmp に位置するその共用体のディスクリミナントを翻訳しま す。このディスクリミナントは、常に enum_t です。次に、 unp に 位 置 す る 共 用 体 が 翻 訳 さ れ ま す。 パラメータ choices は、 xdr_discrim() 構造体の配列へのポインタです。各構造には、順序付き ペアの [value,proc] が入っています。共用体のディスクリミナントが 結合された value に等しい場合は、 proc が呼び出されてその共用 体 を 翻訳します。 xdr_discrim() 構造体配列の最後は、値 NULL のルー チンによって印がつけられます。配列 choices にディスクリミナン ト が見つからない場合は、 defaultarm プロシージャが呼び出されます ( このプロシージャが NULL でないならば)。それに成功すれば 1 を、失 敗すれば 0 を返します。

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

固定長配列とそれに対応する外部表現とを相互に変換するフィルタプリ ミティブです。パラメータ arrp は、その配列へのポインタのア ド レ ス、 size は配列の要素数です。パラメータ elsize は配列の各要素の サイズ、 elproc は配列要素の C 言語形式とその外部表現とを相互 に 翻訳する XDR フィルタです。このルーチンは、成功すれば 1 を、失敗 すれば 0 を返します。

xdr_void()

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

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

xdr_string(xdrs, sp, MAXUN.UNSIGNED ); を呼び出すプリミティブ で、 MAXUN.UNSIGNED は符号なし整数の最大値です。 RPC パッケー ジ が最大で 2 つの XDR ルーチンをパラメータとして渡しますが、最も頻 繁に使用されるプリミティブであるにもかかわらず xdr_string() は 3 つのルーチンを必要とするため、 xdr_wrapstring() は大変便利です。 成功すれば 1 を、失敗すれば 0 を返します。

参照

rpc(3)

次のマニュアルを参照してください。

eXternal Data Representation Standard: Protocol Specification
eXternal Data Representation: Sun Technical Notes
XDR
: External Data Representation Standard
, RFC1014, Sun Microsystems, Inc., USC-ISI

スポンサーリンク