Теория и практика программирования на Си в Unix

       

Поток в памяти


Речь идет о потоке, который позволяет кодировать данные в памяти.

Этот тип потока создается с помощью программы xdrstmem_create() :
void xdrstmem_create(xdr_handle, addr, size, op)
XDR *xdr_handle; /* handle */
char *addr; /* адрес в памяти */
int size; /* размер области памяти */
enum xdr_op op; /* XDR_ENCODE или XDR_DECODE */

Данные в формате XDR записываются или считываются из области памяти, начинающейся с адреса addr, размер которой равен size. Размер области памяти должен быть достаточно велик, чтобы вместить данные XDR ; кроме того, размер области должен быть кратен четырем - последнее требование можно обеспечить с помощью макро RNDUP. Аргумент op определяет тип операции, поскольку поток является однонаправленным.

Если выделенной памяти недостаточно для выполнения операции, операция не выполняется. Речь идет о действительно серьезной проблеме, мешающей использовать этот тип потока. Решить эту проблему можно с помощью одного из трех подходов :
- распределить память с большим запасом. Как правило, объем информации, закодированной в протоколе XDR, не превышает десятка байт
- сначала определить размер потока данных, а затем распределить память
- увеличить размер памяти в случае ошибки.

Пример работы с XDR приведен в параграфе, описывающем совместное иcпользование XDR и сокетов. Этот поток можно комбинировать с сокетами UDP в дейтаграммном режиме.



Содержание раздела