ONC+ 開発ガイド

XDR データ記述

ファイルのデータ構造を XDR で記述した簡単な例を次に示します。このデータは、マシン間のファイル転送に使用することができます。


例 C–2 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 

説明 

00 00 00 09 

– 

ファイル名の長さ = 9 

73 69 6c 6c 

sill 

ファイル名の文字列 

79 70 72 6f 

ypro 

ファイル名の文字列 (続き) 

12 

67 00 00 00 

ファイル名の文字列 (続き) と 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 バイトのヌルパディング