Листинг 16.13. Инициализация структуры и кодирование ее в XDR
//sunrpc/xdr1/write.c
1 #include "unpipc.h"
2 #include "data.h"
3 int
4 main(int argc, char **argv)
5 {
6 XDR xhandle;
7 data out; /* структура, с которой мы работаем */
8 char *buff; /* результат кодирования в XOR */
9 char vop[2];
10 long vlong[3];
11 u_int size;
12 out.short_arg = 1;
13 out.long_arg = 2;
14 out.vstring_arg = "hello, world"; /* присваиваем значение указателю */
15 out.fopaque_arg[0] = 99; /* скрытые данные фиксированной длины */
16 out.fopaque_arg[1] = 88;
17 out.fopaque_arg[2] = 77;
18 vop[0] = 33; /* скрытые данные переменной длины */
19 vop[1] = 44;
20 out.vopaque_arg.vopaque_arg_len = 2;
21 out.vopaque_arg.vopaque_arg_val = vop;
22 out.fshort_arg[0] = 9999; /* массив фиксированной длины */
23 out.fshort_arg[1] = 8888;
24 out.fshort_arg[2] = 7777;
25 out.fshort_arg[3] = 6666;
26 vlong[0] = 123456; /* массив переменной длины */
27 vlong[l] = 234567;
28 vlong[2] = 345678;
29 out.vlong_arg.vlong_arg_len = 3;
30 out.vlong_arg.vlong_arg_val = vlong;
31 out.uarg.result = RESULT_INT; /* размеченное объединение */
32 out.uarg.union_arg_u.intval = 123;
33 buff = Malloc(BUFFSIZE); /* кратен 4-м байтам */
34 xdrmem_create(&xhandle, buff, BUFFSIZE, XDR_ENCODE);
35 if (xdr_data(&xhandle, &out) != TRUE)
36 err_quit("xdr_data error");
37 size = xdr_getpos(&xhandle);
38 Write(STDOUT_FILENO, buff, size);
39 exit(0);
40 }