doc/ja_JP.eucJP/man/man3/xdr.3
SUZUKI Koichi a764b55ba8 Fix typos.
Submitted by:   kano@na.rim.or.jp
2004-07-11 11:15:53 +00:00

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