Листинг 16.12. Заголовочный файл data.h, созданный rpcgen из файла data.x
//sunrpc/xdr1/data.h
1 /*
2 * Please do not edit this file. It was generated using rpcgen.
3 */
4 #ifndef _DATA_H_RPCGEN
5 #define _DATA_H_RPCGEN
6 #include
7 enum result_t {
8 RESULT_INT = 1,
9 RESULT_DOUBLE = 2
10 };
11 typedef enum result_t result_t;
12 struct union_arg {
13 result_t result;
14 union {
15 int intVal;
16 double doubleval;
17 } union_arg_u;
18 };
19 typedef struct union_arg union_arg;
20 struct data {
21 short short_arg;
22 long long_arg;
23 char *vstring_arg;
24 char fopaque_arg[3];
25 struct {
26 u_int vopaque_arg_len;
27 char *vopaque_arg_val;
28 } vopaque_arg;
29 short fshort_arg[4];
30 struct {
31 u_int vlong_arg_len;
32 long *vlong_arg_val;
33 } vlong_arg;
34 union_arg uarg;
35 };
36 typedef struct data data:
37 /* 4the xdr functions */
38 extern bool_t xdr_result_t(XDR *, result_t*);
39 extern bool_t xdr_union_arg(XDR *, union_arg*);
40 extern bool_t xdr_data(XDR *, data*);
41 #endif /* !_DATA_H_RPCGEN */
В файле data_xdr.с объявляется функция xdr_data, вызываемая для кодирования и декодирования структуры data, которую мы определили. Суффикс имени функции _data соответствует имени нашей структуры из листинга 16.11. Первая программа, которую мы напишем, будет называться write.с. Она будет присваивать значения полям структуры data, вызывать xdr_data для кодирования всех полей в формат XDR и записывать результат в стандартный поток вывода.
Эта программа приведена в листинге 16.13.