a764b55ba8
Submitted by: kano@na.rim.or.jp
789 lines
14 KiB
Groff
789 lines
14 KiB
Groff
.\" @(#)xdr.3n 2.2 88/08/03 4.0 RPCSRC; from 1.16 88/03/14 SMI
|
|
.\" $Id: xdr.3,v 1.5 2004-07-11 11:15:52 metal Exp $
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.TH XDR 3 "16 February 1988"
|
|
.SH 名称
|
|
xdr \- 外部データ表現のライブラリルーチン
|
|
.SH 書式および解説
|
|
.LP
|
|
これらのルーチンによって、C プログラマは任意のデータ構造をマシン独立
|
|
に記述することができます。リモートプロシージャコール用の
|
|
データは、これらのルーチンを使って送信されます。
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc)
|
|
\s-1XDR\s0 *xdrs;
|
|
char **arrp;
|
|
u_int *sizep, maxsize, elsize;
|
|
xdrproc_t elproc;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
可変長配列とそれに対応する外部表現とを相互に変換する
|
|
フィルタプリミティブです。パラメータ
|
|
.I arrp
|
|
は配列へのポインタのアドレス、
|
|
.I sizep
|
|
は配列の要素カウントのアドレスであり、この要素カウントは
|
|
.I maxsize
|
|
を超えることはできません。パラメータ
|
|
.I elsize
|
|
は各配列要素の
|
|
.I sizeof
|
|
の値であり、
|
|
.I elproc
|
|
は配列要素の C 形式と外部表現とを相互に変換する
|
|
.SM XDR
|
|
フィルタです。このルーチンは、成功すれば 1
|
|
を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_bool(xdrs, bp)
|
|
\s-1XDR\s0 *xdrs;
|
|
bool_t *bp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
ブール値 (C 言語整数) とその外部表現とを相互に変換する
|
|
フィルタプリミティブです。データをコード化するときは、このフィルタは 1
|
|
または 0 の値を作り出します。このルーチンは、成功すれば 1 を、失敗すれば
|
|
0 を返します。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_bytes(xdrs, sp, sizep, maxsize)
|
|
\s-1XDR\s0 *xdrs;
|
|
char **sp;
|
|
u_int *sizep, maxsize;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
カウントしたバイトストリングとその外部表現とを相互に変換する
|
|
フィルタプリミティブです。パラメータ
|
|
.I sp
|
|
はストリングポインタのアドレス
|
|
です。ストリングの長さはアドレス
|
|
.I sizep
|
|
に置かれ、ストリングの長さは
|
|
.I maxsize
|
|
よりも長くなることはできません。このルーチンは、成功すれば 1 を、
|
|
失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_char(xdrs, cp)
|
|
\s-1XDR\s0 *xdrs;
|
|
char *cp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語のキャラクタとその外部表現とを相互に変換するフィルタプリミティブ
|
|
です。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
注:コード化されたキャラクタは圧縮されず、それぞれは 4 バイトを
|
|
占有します。キャラクタの配列については、
|
|
.BR xdr_bytes(\|) ,
|
|
.BR xdr_opaque(\|) ,
|
|
.B xdr_string(\|)
|
|
を使うことを考える価値があります。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
void
|
|
xdr_destroy(xdrs)
|
|
\s-1XDR\s0 *xdrs;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.SM XDR
|
|
ストリーム
|
|
.I xdrs
|
|
に結合された破壊ルーチンを呼び出すマクロです。破壊とは、通常は
|
|
そのストリームに結合されたプライベートデータ構造を解放することを
|
|
意味します。
|
|
.B xdr_destroy(\|)
|
|
を呼び出した後で
|
|
.I xdrs
|
|
を使うことは、未定義です。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_double(xdrs, dp)
|
|
\s-1XDR\s0 *xdrs;
|
|
double *dp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の倍精度数 (
|
|
.B double
|
|
) とその外部表現とを相互に変換する
|
|
フィルタプリミティブです。このルーチンは、成功すれば 1 を、
|
|
失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_enum(xdrs, ep)
|
|
\s-1XDR\s0 *xdrs;
|
|
enum_t *ep;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の
|
|
.B enum
|
|
(実際は整数) とその外部表現とを相互に変換する
|
|
フィルタプリミティブです。このルーチンは、成功すれば 1 を、
|
|
失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_float(xdrs, fp)
|
|
\s-1XDR\s0 *xdrs;
|
|
float *fp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の
|
|
.B float
|
|
とその外部表現とを相互に変換する
|
|
フィルタプリミティブです。このルーチンは、成功すれば 1 を、
|
|
失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 9
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
void
|
|
xdr_free(proc, objp)
|
|
xdrproc_t proc;
|
|
char *objp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
ジェネリックな解放ルーチンです。最初の引数は、解放するオブジェクトの
|
|
.SM XDR
|
|
ルーチンです。2 番目の引数は、そのオブジェクト自体への
|
|
ポインタです。注:このルーチンに渡されるポインタは解放されませんが、それが
|
|
指すものは解放 (反復的に) されます。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
u_int
|
|
xdr_getpos(xdrs)
|
|
\s-1XDR\s0 *xdrs;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.SM XDR
|
|
ストリーム
|
|
.I xdrs
|
|
に結合された位置検索ルーチンを呼び出すマクロです。このルーチンは、
|
|
.SM XDR
|
|
バイトストリームの位置を示す符号なしの整数を返します。
|
|
.SM XDR
|
|
ストリームのよいところは、
|
|
.SM XDR
|
|
ストリームインスタンスがそれを保証しているとは限らない場合であっても、
|
|
この数字に対して簡単な算術計算が使えることです。
|
|
.br
|
|
.if t .ne 4
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
.br
|
|
long *
|
|
xdr_inline(xdrs, len)
|
|
\s-1XDR\s0 *xdrs;
|
|
int len;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.SM XDR
|
|
ストリーム
|
|
.I xdrs
|
|
に結合されたインラインルーチンを呼び出すマクロです。このルーチンは、
|
|
ストリームのバッファの連続した部分へのポインタを返します。
|
|
.I len
|
|
は、希望するバッファのバイト長です。注:ポインタは
|
|
.B "long *"
|
|
にキャストされます。
|
|
.IP
|
|
警告:
|
|
.B xdr_inline(\|)
|
|
は、連続するバッファの部分を割り当てられない場合は、
|
|
.SM NULL
|
|
(0) を返すことがあります。従って、ストリームインスタンスによって
|
|
挙動が異なる場合があります。このルーチンは、効率を上げるために
|
|
用意されています。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_int(xdrs, ip)
|
|
\s-1XDR\s0 *xdrs;
|
|
int *ip;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の整数とその外部表現とを相互に変換するフィルタプリミティブ
|
|
です。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_long(xdrs, lp)
|
|
\s-1XDR\s0 *xdrs;
|
|
long *lp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語
|
|
の長整数 (
|
|
.B long
|
|
) とその外部表現とを相互に変換するフィルタプリミティブです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 12
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
void
|
|
xdrmem_create(xdrs, addr, size, op)
|
|
\s-1XDR\s0 *xdrs;
|
|
char *addr;
|
|
u_int size;
|
|
enum xdr_op op;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.I xdrs
|
|
によって指される
|
|
.SM XDR
|
|
ストリームオブジェクトを初期化します。ストリームのデータは、長さが
|
|
.I size
|
|
バイトを超えない
|
|
.I addr
|
|
の位置にあるメモリに書込まれるか、またはそこから読み出されます。
|
|
.I op
|
|
は、
|
|
.SM XDR
|
|
ストリームの方向 (
|
|
.BR \s-1XDR_ENCODE\s0 ,
|
|
.BR \s-1XDR_DECODE\s0 ,
|
|
.B \s-1XDR_FREE\s0
|
|
のいずれか) を決定します。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_opaque(xdrs, cp, cnt)
|
|
\s-1XDR\s0 *xdrs;
|
|
char *cp;
|
|
u_int cnt;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
固定サイズの不透明 (opaque) データとその外部表現とを相互に変換する
|
|
フィルタプリミティブです。パラメータ
|
|
.I cp
|
|
は不透明データのアドレスであり、
|
|
.I cnt
|
|
はそのサイズをバイトで表したものです。このルーチンは、
|
|
成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_pointer(xdrs, objpp, objsize, xdrobj)
|
|
\s-1XDR\s0 *xdrs;
|
|
char **objpp;
|
|
u_int objsize;
|
|
xdrproc_t xdrobj;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.B xdr_reference(\|)
|
|
と同じ働きをします。但し、このルーチンが
|
|
.SM NULL
|
|
ポインタをシリアル化するのに対して、
|
|
.B xdr_reference(\|)
|
|
はシリアル化しません。
|
|
従って、
|
|
.B xdr_pointer(\|)
|
|
はバイナリツリーやリンクリストのような反復的データ構造を
|
|
表すことができます。
|
|
.br
|
|
.if t .ne 15
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
void
|
|
xdrrec_create(xdrs, sendsize, recvsize, handle, readit, writeit)
|
|
\s-1XDR\s0 *xdrs;
|
|
u_int sendsize, recvsize;
|
|
char *handle;
|
|
int (*readit) (\|), (*writeit) (\|);
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.I xdrs
|
|
によって指される
|
|
.SM XDR
|
|
ストリームオブジェクトを初期化します。ストリームのデータはサイズ
|
|
.I sendsize
|
|
のバッファに書込まれ、値 0 はシステムが適切なデフォルトを使う
|
|
必要があることを示します。ストリームのデータは、サイズ
|
|
.I recvsize
|
|
のバッファから読み込まれ、このルーチンも値 0 を渡すことによって
|
|
適切なデフォルトを設定することができます。ストリームの出力バッファが
|
|
一杯のときは、
|
|
.I writeit
|
|
が呼ばれます。同様に、ストリームの入力バッファが空のときは、
|
|
.I readit
|
|
が呼ばれます。これらの 2 つのルーチンの挙動は、システムコール
|
|
.BR read ,
|
|
.B write
|
|
と似ています。但し、
|
|
.B read
|
|
には最初のパラメータとして
|
|
.I handle
|
|
が渡されることが異なります。注:
|
|
.SM XDR
|
|
ストリームの
|
|
.I op
|
|
フィールドは、呼び出し元が設定しなければなりません。
|
|
.IP
|
|
警告: この
|
|
.SM XDR
|
|
ストリームは、中間レコードストリームを実装しています。
|
|
従って、ストリームにはレコードの境界情報を与える追加バイトが入っています。
|
|
.br
|
|
.if t .ne 9
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdrrec_endofrecord(xdrs, sendnow)
|
|
\s-1XDR\s0 *xdrs;
|
|
int sendnow;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.B xdrrec_create(\|)
|
|
によって作成されたストリームについてのみ呼び出すことができます。
|
|
出力バッファにあるデータは完全なレコードとしてマークされ、
|
|
出力バッファは
|
|
.I sendnow
|
|
が 0 でない場合はオプションで書き出されます。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdrrec_eof(xdrs)
|
|
\s-1XDR\s0 *xdrs;
|
|
int empty;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.B xdrrec_create(\|)
|
|
によって作成されたストリームについてのみ呼び出すことができます。
|
|
ストリーム中の現在のレコードの残りの部分を処理した後に、
|
|
このルーチンはストリームにそれ以上の入力がない場合は 1 を返し、
|
|
ある場合は 0 を返します。
|
|
.br
|
|
.if t .ne 3
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdrrec_skiprecord(xdrs)
|
|
\s-1XDR\s0 *xdrs;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.B xdrrec_create(\|)
|
|
によって作成されたストリームについてのみ呼び出すことができます。
|
|
これは、
|
|
.SM XDR
|
|
のインプリメンテーションに対して、
|
|
ストリームの入力バッファにある現在のレコードの残りの部分を
|
|
廃棄するように指示します。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 11
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_reference(xdrs, pp, size, proc)
|
|
\s-1XDR\s0 *xdrs;
|
|
char **pp;
|
|
u_int size;
|
|
xdrproc_t proc;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
構造体の中を追いかけるポインタを与えるプリミティブです。
|
|
パラメータ
|
|
.I pp
|
|
はポインタのアドレス、
|
|
.I size
|
|
は
|
|
.I *pp
|
|
が指す構造体のサイズ、
|
|
.I proc
|
|
は構造体をその C 言語形式と外部表現との間でフィルタする
|
|
.SM XDR
|
|
プロシージャです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.IP
|
|
警告: このルーチンは
|
|
.SM NULL
|
|
ポインタを理解しません。代りに
|
|
.B xdr_pointer(\|)
|
|
を使ってください。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_setpos(xdrs, pos)
|
|
\s-1XDR\s0 *xdrs;
|
|
u_int pos;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.SM XDR
|
|
ストリーム
|
|
.I xdrs
|
|
に結合された位置設定ルーチンを呼び出すマクロです。
|
|
パラメータ
|
|
.I pos
|
|
は、
|
|
.B xdr_getpos(\|)
|
|
から取得した位置を示す値です。このルーチンは、
|
|
.SM XDR
|
|
ストリームの位置を再設定できる場合は 1 を、そうでない
|
|
場合は 0 を返します。
|
|
.IP
|
|
警告:
|
|
.SM XDR
|
|
ストリームの種類によっては、再設定は困難です。
|
|
従って、このルーチンはある種類のストリームには成功し、別の種類のストリーム
|
|
には失敗する場合があります。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_short(xdrs, sp)
|
|
\s-1XDR\s0 *xdrs;
|
|
short *sp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の短整数 (
|
|
.B short
|
|
) とその外部表現とを相互に変換するフィルタプリミティブです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
void
|
|
xdrstdio_create(xdrs, file, op)
|
|
\s-1XDR\s0 *xdrs;
|
|
\s-1FILE\s0 *file;
|
|
enum xdr_op op;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは、
|
|
.I xdrs
|
|
によって指される
|
|
.SM XDR
|
|
ストリームオブジェクトを初期化します。
|
|
.SM XDR
|
|
ストリームデータは、標準
|
|
.B I/O
|
|
ストリーム
|
|
.I file
|
|
に書込まれるか、またはそこから読み出されます。パラメータ
|
|
.I op
|
|
は、
|
|
.SM XDR
|
|
ストリームの方向 (
|
|
.BR \s-1XDR_ENCODE\s0 ,
|
|
.BR \s-1XDR_DECODE\s0 ,
|
|
.B \s-1XDR_FREE\s0
|
|
か) を決定します。
|
|
.IP
|
|
警告: このような
|
|
.SM XDR
|
|
ストリームに結合された破壊ルーチンは、
|
|
.I file
|
|
ストリームについて
|
|
.B fflush(\|)
|
|
は呼び出しますが、
|
|
.B fclose(\|)
|
|
は決して呼び出しません。
|
|
.br
|
|
.if t .ne 9
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_string(xdrs, sp, maxsize)
|
|
\s-1XDR\s0
|
|
*xdrs;
|
|
char **sp;
|
|
u_int maxsize;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の文字列とそれに対応する外部表現とを相互に変換する
|
|
フィルタプリミティブです。文字列の長さは
|
|
.I maxsize
|
|
を超えることはできません。注:
|
|
.I sp
|
|
は、ストリングのポインタのアドレスです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 8
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_u_char(xdrs, ucp)
|
|
\s-1XDR\s0 *xdrs;
|
|
unsigned char *ucp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
符号なしの C 言語のキャラクタとその外部表現とを相互に変換する
|
|
フィルタプリミティブです。このルーチンは、成功すれば 1 を、
|
|
失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 9
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_u_int(xdrs, up)
|
|
\s-1XDR\s0 *xdrs;
|
|
unsigned *up;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の符号なし整数 (
|
|
.B unsigned
|
|
) とその外部表現とを相互に変換するフィルタプリミティブです。
|
|
このルーチンは成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_u_long(xdrs, ulp)
|
|
\s-1XDR\s0 *xdrs;
|
|
unsigned long *ulp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の符号なし長整数 (
|
|
.B "unsigned long"
|
|
) とその外部表現とを相互に変換するフィルタプリミティブです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 7
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_u_short(xdrs, usp)
|
|
\s-1XDR\s0 *xdrs;
|
|
unsigned short *usp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
C 言語の符号なし短整数 (
|
|
.B "unsigned short"
|
|
) とその外部表現とを相互に変換するフィルタプリミティブです。
|
|
このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 16
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_union(xdrs, dscmp, unp, choices, dfault)
|
|
\s-1XDR\s0 *xdrs;
|
|
int *dscmp;
|
|
char *unp;
|
|
struct xdr_discrim *choices;
|
|
bool_t (*defaultarm) (\|); /* may equal \s-1NULL\s0 */
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
ディスクリミナントで識別された C 言語の共用体 (
|
|
.B union
|
|
) とそれに対応する外部表現とを相互に変換する
|
|
フィルタプリミティブです。まず最初に
|
|
.I dscmp
|
|
に位置するその共用体のディスクリミナントを翻訳します。
|
|
このディスクリミナントは、常に
|
|
.B enum_t
|
|
です。次に、
|
|
.I unp
|
|
に位置する共用体が翻訳されます。パラメータ
|
|
.I choices
|
|
は、
|
|
.B xdr_discrim(\|)
|
|
構造体の配列へのポインタです。各構造には、順序付きペアの
|
|
.RI [ value , proc ]
|
|
が入っています。共用体のディスクリミナントが結合された
|
|
.I value
|
|
に等しい場合は、
|
|
.I proc
|
|
が呼び出されてその共用体を翻訳します。
|
|
.B xdr_discrim(\|)
|
|
構造体配列の最後は、値
|
|
.SM NULL\s0
|
|
のルーチンによって印がつけられます。
|
|
配列
|
|
.I choices
|
|
にディスクリミナントが見つからない場合は、
|
|
.I defaultarm
|
|
プロシージャが呼び出されます (このプロシージャが
|
|
.SM NULL\s0
|
|
でないならば)。それに成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 6
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_vector(xdrs, arrp, size, elsize, elproc)
|
|
\s-1XDR\s0 *xdrs;
|
|
char *arrp;
|
|
u_int size, elsize;
|
|
xdrproc_t elproc;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
固定長配列とそれに対応する外部表現とを相互に変換する
|
|
フィルタプリミティブです。パラメータ
|
|
.I arrp
|
|
は、その配列へのポインタのアドレス、
|
|
.I size
|
|
は配列の要素数です。パラメータ
|
|
.I elsize
|
|
は配列の各要素のサイズ、
|
|
.I elproc
|
|
は配列要素の C 言語形式とその外部表現とを相互に翻訳する
|
|
.SM XDR
|
|
フィルタです。このルーチンは、成功すれば 1 を、失敗すれば 0 を返します。
|
|
.br
|
|
.if t .ne 5
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_void(\|)
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
このルーチンは常に 1 を返します。これは、関数パラメータを
|
|
必要とするが何もしない
|
|
.SM RPC
|
|
ルーチンに渡すことができます。
|
|
.br
|
|
.if t .ne 10
|
|
.LP
|
|
.ft B
|
|
.nf
|
|
.sp .5
|
|
xdr_wrapstring(xdrs, sp)
|
|
\s-1XDR\s0 *xdrs;
|
|
char **sp;
|
|
.fi
|
|
.ft R
|
|
.IP
|
|
.B "xdr_string(xdrs, sp, \s-1MAXUN.UNSIGNED\s0 );"
|
|
を呼び出すプリミティブで、
|
|
.SM MAXUN.UNSIGNED
|
|
は符号なし整数の最大値です。
|
|
.SM RPC
|
|
パッケージが最大で 2 つの
|
|
.SM XDR
|
|
ルーチンをパラメータとして渡しますが、
|
|
最も頻繁に使用されるプリミティブであるにもかかわらず
|
|
.B xdr_string(\|)
|
|
は 3 つのルーチンを必要とするため、
|
|
.B xdr_wrapstring(\|)
|
|
は大変便利です。成功すれば 1 を、失敗すれば 0 を返します。
|
|
.SH 参照
|
|
.BR rpc (3)
|
|
.LP
|
|
次のマニュアルを参照してください。
|
|
.RS
|
|
.ft I
|
|
eXternal Data Representation Standard: Protocol Specification
|
|
.br
|
|
eXternal Data Representation: Sun Technical Notes
|
|
.ft R
|
|
.br
|
|
.IR "\s-1XDR\s0: External Data Representation Standard" ,
|
|
.SM RFC1014, Sun Microsystems, Inc.,
|
|
.SM USC-ISI\s0
|