Читаем UNIX: взаимодействие процессов полностью

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.

Листинг 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 }

Инициализация элементов структуры ненулевыми значениями

12-32 Сначала мы присваиваем полям структуры ненулевые значения. В случае полей переменной длины мы должны установить длину этих полей. Мы присваиваем дискриминанту размеченного объединения значение RESULT_INT и помещаем в его соответствующее поле значение 123.

Выделение буфера
Перейти на страницу:

Все книги серии Мастер-класс

Секреты резьбы по дереву
Секреты резьбы по дереву

Изделия из древесины и материалов, имитирующих ее текстуру, привычным образом окружают нас в повседневной жизни, поэтому мы относимся к ней как к чему-то обыденному. Но как только ее коснется умелая рука мастера резьбы по дереву, рождается произведение искусства и раскрываются такие качества древесины, как богатая фактура, разнообразие цветов, особая теплота. Эта книга поможет читателю открыть для себя удивительный мир творчества и познать секреты резьбы по дереву. Автор надеется, что начинающие резчики найдут в ней интересный и полезный материал, который позволит им стать мастерами. В приложении представлены рисунки орнаментов и различных узоров, которые на первых порах можно копировать, а по мере приобретения навыка на их основе разрабатывать свои образцы.

Галина Алексеевна Серикова

Сделай сам / Хобби и ремесла / Руководства / Дом и досуг / Словари и Энциклопедии

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных