ファイルのデータ構造を XDR で記述した簡単な例を次に示します。このデータは、マシン間のファイル転送に使用することができます。
const MAXUSERNAME = 32;/* ユーザー名の長さの最大値 */
const MAXFILELEN = 65535; /* ファイルの長さの最大値 */
const MAXNAMELEN = 255; /* ファイル名の長さの最大値 */
/* ファイルのタイプ: */
enum filekind {
TEXT = 0, /* ASCII データ */
DATA = 1, /* raw データ */
EXEC = 2 /* 実行可能ファイル */
};
/* ファイルタイプ別のファイル情報: */
union filetype switch (filekind kind) {
case TEXT:
void; /* 追加情報なし */
case DATA:
string creator<MAXNAMELEN>; /* データ作成者 */
case EXEC:
string interpreter<MAXNAMELEN>; /*プログラムインタプリタ*/
};
/* 完全なファイル: */
struct file {
string filename<MAXNAMELEN>; /* ファイル名 */
filetype type; /* ファイル情報 */
string owner<MAXUSERNAME>; /* ファイルの所有者 */
opaque data<MAXFILELEN>; /* ファイルデータ */
};
linda というユーザーが、(quit) というデータだけが入った自分の LISP プログラム sillyprog を XDR 形式で保存するとします。このファイルは次の表に示すように符号化されます。
表 C–1 XDR データ記述の例|
オフセット |
バイト (16 進) |
ASCII |
説明 |
|---|---|---|---|
|
0 |
00 00 00 09 |
– |
ファイル名の長さ = 9 |
|
4 |
73 69 6c 6c |
sill |
ファイル名の文字列 |
|
8 |
79 70 72 6f |
ypro |
ファイル名の文字列 (続き) |
|
12 |
67 00 00 00 |
g |
ファイル名の文字列 (続き) と 3 バイトのヌルパディング |
|
16 |
00 00 00 02 |
– |
ファイルタイプ Filekind は EXEC = 2 |
|
20 |
00 00 00 04 |
– |
インタプリタ名の長さ = 4 |
|
24 |
6c 69 73 70 |
lisp |
インタプリタの文字列 |
|
28 |
00 00 00 04 |
– |
所有者名の長さ = 4 |
|
32 |
6a 6f 68 6e |
linda |
所有者名 |
|
36 |
00 00 00 06 |
– |
ファイルデータの長さ = 6 |
|
40 |
28 71 75 69 |
(qu |
ファイルデータ |
|
44 |
74 29 00 00 |
t) |
ファイルデータ (続き) と 2 バイトのヌルパディング |