Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ xdr_inline(3N) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

rpc(3N)

XDR(3N)  —  NEWS-OS Programmer’s Manual

名称

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 、失敗した場合はゼロを返します。

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

これは、ブール(C 整数)とその外部表現との間の変換を行うフィルタ プリミティブです。 データをコード化する際に、このフィルタは 1 かゼロのいずれかの値を 生成します。 このルーチンは、成功した場合は 1、失敗した場合はゼロを返します。

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

これは、カウントされたバイト文字列とその外部表現との間の変換を行う フィルタプリミティブです。 パラメータ sp は文字列ポインタのアドレスです。 文字列の長さは、アドレス sizep に入れられます。 文字列は、 maxsize より長くてはいけません。 このルーチンは、成功した場合は 1、失敗した場合はゼロを返します。

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

これは、C 文字とその外部表現との間の変換を行うフィルタプリミティブです。 このルーチンは、成功した場合は 1、失敗した場合はゼロを返します。 注意 : コード化された文字はパックされず、それぞれ 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、失敗した場合はゼロを返します。

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

これは、C enums (実際は整数)とその外部表現との間の変換を行うフィルタプリミティブです。 このルーチンは、成功した場合は 1、失敗した場合はゼロを返します。

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

これは、C floats とその外部表現との間の変換を行うフィルタプリミティブです。 このルーチンは、成功した場合は 1、失敗した場合はゼロを返します。

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

これは、総称的な解放ルーチンです。 最初のパラメータは、解放されるオブジェクトのための XDR ルーチンです。 第2の引数は、オブジェクト自体を指すポインタです。 注意 : このルーチンに渡されるポインタは解放 されません。 が、それが指すものは解放 されます (再帰的に)。

u_int
xdr_getpos(xdrs)
XDR ∗xdrs;

これは、 XDR ストリーム xdrs と関連する get-position ルーチンを呼び出すマクロです。 このルーチンは、 XDR バイトストリームの位置を示す符号なしの整数を返します。 XDR ストリームの望ましい機能は、簡単な演算でこの数字が処理されることですが、 XDR ストリームの場合はこれを保証する必要はありません。

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

これは、 XDR ストリーム xdrs と関連するインラインルーチンを呼び出すマクロです。 このルーチンは、ストリームのバッファの連続的な部分を指すポインタを 返します。 len は、希望するバッファのバイト長です。 注意 : ポインタは、 long ∗ に向けられます。

警告 : xdr_inline() は、バッファの連続する部分を割り当てることができない場合、 ナル (0)を返すことがあります。したがって、挙動はストリームの例によって変わります。 これは、効率のためのものです。

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

これは、C 整数とその外部表現との間の変換を行うフィルタプリミティブです。 このルーチンは、成功した場合は 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 ストリームオブジェクトを初期設定します。 ストリームのデータは、 size バイト長以下の位置 addr でメモリのチャンクに書き込まれ、あるいはメモリのチャンクから 読み取られます。 op は、 XDR ストリームの方向を決定します( 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() は直列化を行わない、という点を除いて 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 のバッファに書き込まれます。 ゼロの値は、システムが適切なデフォルトを使用することを示します。 ストリームのデータは、サイズ recvsize のバッファから読み取られます。 これは、ゼロの値を渡すことによって適切なデフォルトに設定することも できます。 ストリームの出力バッファがいっぱいの場合は、 writeit が呼び出されます。 同様に、ストリームの入力バッファが空の場合は、 readit が呼び出されます。 これらの 2 つのルーチンの挙動は、システム呼び出し read および write と類似していますが、前者のルーチンでは第1パラメータとして 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、失敗した場合はゼロを返します。

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

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

これは、 XDR ストリーム xdrs と関連する位置設定ルーチンを呼び出すマクロです。 パラメータ pos は、 xdr_getpos() から得られる位置の値です。 このルーチンは、 XDR ストリームを再度位置づけすることができる場合は 1、そうでない場合はゼロを返します。

警告 : 再位置づけすることが困難なタイプの 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() を呼び出しますが、 fclose() を呼び出すことはありません。

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;

これは、 unsigned C 文字とその外部表現との間の変換を行うフィルタプリミティブです。 このルーチンは、成功した場合は 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, 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() 構造体のアレイを指すポインタです。 各構造体は、順序づけられた 1 対の [value,proc] を含んでいます。 ユニオンのディスクリミナントが関連する value と等しい場合は、そのユニオンを変換するために proc が呼び出されます。 xdr_discrim() 構造体アレイの終わりは、値 ナル のルーチンによって示されます。 ディスクリミナントが choices アレイ内で見つからない場合は、 defaultarm プロシージャが呼び出されます( ナル でない場合)。 これは、成功した場合は 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 ) を呼び出すプリミティブです。 RPC パッケージは2つの XDR ルーチンのうち最大のものをパラメータとして渡し、最も頻繁に使用されるプリミティブの1つである xdr_string() は3つを必要とするため、 xdr_wrapstring() は便利です。 これは、成功した場合は 1、失敗した場合はゼロを返します。

関連事項

rpc(3N) NEWS-OS Reference Manual

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026