на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 16.14. Считывание структуры data из формата XDR

//sunrpc/xdr1/read.c

1  #include "unpipc.h"

2  #include "data.h"


3  int

4  main(int argc, char **argv)

5  {

6   XDR xhandle;

7   int i;

8   char *buff;

9   data in;

10  ssize_t n;

11  buff = Malloc(BUFFSIZE); /* адрес должен быть кратен 4-м байтам */

12  n = Read(STDIN_FILENO, buff, BUFFSIZE);

13  printf("read %ld bytes\n", (long) n);

14  xdrmem_create(&xhandle, buff, n, XDR_DECODE);

15  memset(&in, 0, sizeof(in));

16  if (xdr_data(&xhandle, &in) != TRUE)

17   err_quit("xdr_data error");

18  printf("short_arg = %d, long_arg = %ld, vstring_arg = '%s'\n",

19   in.short_arg, in.long_arg, in.vstring_arg);

20  printf("fopaque[] = %d, %d, %d\n",

21   in.fopaque_arg[0], in.fopaque_arg[1], in.fopaque_arg[2]);

22  printf("vopaque<> =");

23  for (i = 0; i < in.vopaque_arg.vopaque_arg_len; i++)

24   printf(" %d", in.vopaque_arg.vopaque_arg_val[i]);

25  printf("\n");

26  printf("fshort_arg[] = %d, %d, %d, %d\n", in.fshort_arg[0],

27   in.fshort_arg[1], in.fshort_arg[2], in.fshort_arg[3]);

28  printf("vlong<> =");

29  for (i = 0; i < in.vlong_arg.vlong_arg_len; i++)

30   printf(" %ld", in.vlong_arg.vlong_arg_val[i]);

31  printf("\n");

32  switch (in.uarg.result) {

33  case RESULT_INT:

34   printf("uarg (int) = %d\n", in.uarg.union_arg_u.intval);

35   break;

36  case RESULT_DOUBLE:

37   printf("uarg (double) = %g\n", in.uarg.union_arg_u.doubleval);

38   break;

39  default:

40   printf("uarg (void)\n");

41   break;

42  }

43  xdr_free(xdr_data, (char*)&in);

44  exit(0);

45 }


Получение размера кодированных данных и запись их в поток вывода | UNIX: взаимодействие процессов | Выделение правильно расположенного буфера