Главная страница Взаимодействие нетривиальных процессов char- hyper: байт 0 12 3 MSB такой же формат кодирования для unsigned char, short, unsigned short, int, unsigned int, (ong, unsigned long, bool, enum такой же формат кодирования для unsigned hyper
ехр мантисса
I бит - знак II бит - экспонента 52 бит - мантисса мантисса
1 бит-лнак 15 бит - экспонента opaque [п]:
мантисса скрытые данные фиксированной длины байт О 1 п-1<- г байт, так чтобы (п+г) mod 4 = 0 opaque <m>: string <m>: type [n]: type <m>: union: длина m 4 байт -> 0 1 m-1. скрытые данные переменной длины длина т г байт, так чтобы (т+г) mod 4 = 0 строка 4 байт т-1. Гбайт, так чтобы (т+г) mod 4 = 0 element О element 1 element п -1 массив фиксированной длины #elements т element О element 1 <-> размер каждого элемента кратен 4 байтам массив переменной element т -1 4 байт длины размер каждого элемента кратен 4 байтам
4 байт размер ветви кратен 4 байт Рис. 16.3. Кодирование типов данных в XDR Пример: использование XDR без RPC Приведем пример использования XDR без RPC. Мы воспользуемся стандартом XDR для кодирования структуры данных в машинно-независимое представление, в котором они могут быть обработаны другими системами. Этот метод может использоваться для написания файлов или для отправки данных по сети в машинно-независимом формате. В листинге 16.11 приведен текст файла спецификации data. X, который на самом деле является файлом спецификации XDR, поскольку мы не объявляем никаких процедур RPC. ПРИМЕЧАНИЕ - Суффикс имени файла (.х) происходит от термина файл спецификации XDR . Спецификация RPC утверждает, что язык RPC (RPCL) идентичен XDR в части, относящейся к описанию данных. В RPCL была добавлена только возможность описания процедур. Листинг 16.11. Файл спецификации XDR sunrpc/xdrl/data.x 1 enum result t { 2 RESULT INT = 1. RESULT DOUBLE - 2 3 }: 4 union union arg switch (result t result) { 5 case RESULT INT:
21 }: Объявление перечисления и размеченного объединения 1-11 Мы объявляем перечислимый тип с двумя значениями и размеченное объединение, использующее это перечисление в качестве дискриминанта. Если дискриминант имеет значение RESULT I NT, после значения дискриминанта передается целое число. Если дискриминант имеет значение RESULT DOUBLE, за ним передается число с плавающей точкой двойной точности. В противном случае после дискриминанта не передается ничего. Объявление структуры 12-21 Мы объявляем структуру, состоящую из различных типов, поддерживаемых XDR. Поскольку мы не объявляем процедур RPC, программа rpcgen не создаст заглушку клиента и заглушку сервера. Однако она создаст заголовочный файл data. h и файл data xdr. с, содержащий функции XDR, обеспечивающие кодирование и декодирование данных, объявленных в файле data. х. В листинге 16.12 приведен получающийся в результате работы rpcgen заголовочный файл data. h. Содержимое этого файла выглядит так, как мы и предполагали (табл. 16.2). Листинг 16.12. Заголовочный файл data.h, созданный rpcgen из файла data.x sunrpc/xdrl/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 <rpc/rpc.h> 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 argJen: 27 char *vopaque arg val: 28 } vopaque arg: 29 short f5hort arg[4]; 30 struct { 31 ujnt vlong argJen: 32 long *vlong arg val: 33 } vlong arg: 34 union arg uarg;
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |