Процедуры преобразования библиотеки XDR

Опубликовано в Технологии > Серверные технологии Продолжение

Процедуры преобразования библиотеки XDR перечислены в табл. 20.2. Эти процедуры позволяют выполнять и прямое, и обратное преобразование данных, поскольку в них большинство параметров являются указателями на объекты данных, а не значениями этих данных.

Таблица 20.2. Процедуры преобразования данных XDR, входящие в состав библиотеки XDR

Процедура Параметры Преобразуемый тип данных
xdr__bool xdrs, ptrbool Логическое значение (значение int в языке С)
/ xdr_bytes xdrs, ptrstr, strsize, maxsize Строка байтов переменной длины
xdr_char xdrs, ptrchar Символ
xdrjiouble xdrs, ptrdouble Число с плавающей точкой двойной точности
xdr_enum xdrs, ptrint Переменная перечислимого типа (значение int в языке С)
xdr_float xdrs, ptrfloat Число с плавающей точкой одинарной точности
xdr_int xdrs, ip 32-битовое целое число
xdr_long xdrs, ptrlong 64-битовое целое число
xdr_opaque xdrs, ptrchar, count Байты, передаваемые без преобразования
xdrjpointer xdrs, ptrobj, objsize, xdrobj Указатель (используемый в связанных структу­рах данных, таких как списки или деревья)
xdr_short xdrs, ptrshort 16-битовое целое число
xdr_string xdrs, ptrstr, maxsize Строка языка С
xdr_u_char xdrs, ptruchar 8-битовое целое число без знака
xdrji short xdrs, ptrushort 16-битовое целое число без знака

Для формирования сообщения необходимо вызвать в приложении процедуры преобразования XDR для каждого элемента данных в сообщении. После кодирования каждого элемента данных и размещения их в потоке XDR приложение может передать сообщение путем отправки результирующего потока. В приложении-получателе весь этот процесс должен быть выполнен в обратном порядке. В нем вызывается процедура xdrmem_create для создания в памяти буфера, предназначенного для размещения потока XDR, и в этот буфер записывается входящее сообщение. Программное обеспечение XDR регистрирует направление преобразования в самом потоке, в котором процедуры преобразования могут получить доступ к этому потоку. При создании потока XDR, который будет использоваться для ввода, получатель задает в качестве третьего параметра функции xdrmem_create константу XDRJDEC0DE. В результате при вызове получателем каждой отдельной процедуры преобразования с указанием в качестве параметра входного потока процедура извлекает из потока элемент данных и преобразует его во внутреннее представление. Здорово. Высококлассные счетчики воды оптом вам обязательно понравятся. Например, если получатель установил поток XDR, используемый для ввода (т.е. в вызове процедуры инициализации был указан параметр XDR_DEC0DE), он может извлечь из потока 32-битовое целое число и преобразовать его во внутреннее представление путем вызова процедуры xdr_int:

int i; /* Целое число во внутреннем представлении */
...   /* Предполагается, что поток инициализируется для */
/* работы в режиме XDR_DEC0DE */ xdr_int(xdrs, &i); /* Целое число извлекается из потока */
 

Поэтому, в отличие от процедур преобразования htons и ntohs, предусмотренных в операционной системе Linux, отдельные процедуры преобразования XDR не позволяют определить его направление. Вместо этого они требуют, чтобы это направление было задано в программе при создании потока XDR.

Отдельные процедуры преобразования XDR не позволяют указать направление преобразования. Вместо этого отдельная процедура, позволяющая выполнять и прямое и обратное преобразование, устанавливает направление преобразования путем определения характеристик используемого потока XDR.

Похожие статьи