Using an XDR Data Description Example
This section explains the XDR data description example to transfer files from one machine to another.
The following short eXternal Data Representation (XDR) data description
of a file can be used to transfer files from one machine to another:
const MAXUSERNAME = 32; /* max length of a user name */
const MAXFILELEN = 65535; /* max length of a file */
const MAXNAMELEN = 255; /* max length of a file name */
/*
* Types of files:
*/
enum filekind {
TEXT = 0, /* ascii data */
DATA = 1, /* raw data */
EXEC = 2 /* executable */
};
/*
* File information, per kind of file:
*/
union filetype switch (filekind kind) {
case TEXT:
void; /* no extra information */
case DATA:
string creator<MAXNAMELEN>; /* data creator */
case EXEC:
string interpretor<MAXNAMELEN>; /* program interpretor */
};
/*
* A complete file:
*/
struct file {
string filename<MAXNAMELEN>; /* name of file */
filetype type; /* info about file */
string owner<MAXUSERNAME>; /* owner of file */
opaque data<MAXFILELEN>; /* file data */
};
If a user named john wants to store his sillyprog LISP program, which contains just the data (quit), his file can be encoded as follows:
Offset | Hex Bytes | ASCII | Description |
---|---|---|---|
0 | 00 00 00 09 | ... | Length of file name = 9 |
4 | 73 69 6c 6c | sill | File name characters |
8 | 79 70 72 6f | ypro | ... and more characters ... |
12 | 67 00 00 00 | g... | ... and 3 zero-bytes of fill |
16 | 00 00 00 02 | ... | File type is EXEC = 2 |
20 | 00 00 00 04 | ... | Length of owner = 4 |
24 | 6c 69 73 70 | lisp | Interpretor characters |
28 | 00 00 00 04 | ... | Length of owner = 4 |
32 | 6a 6f 68 6e | john | Owner characters |
36 | 00 00 00 06 | ... | Length of file data = 6 |
40 | 28 71 75 69 | (qui | File data bytes ... |
44 | 74 29 00 00 | t).. | ... and 2 zero-bytes of fill |