Manpages

名 前

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/ に 書 か れ て い る 。