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

       

Стандартный поток ввода-вывода


Речь идет о потоке, который позволяет записывать данные XDR в файл или считывать их из файла. Применение фильтра преобразования вызывает чтение из файла или запись в файл.

Этот тип потока создается с помощью программы xdrstdio_create() :
void xdrstdio_create(xdr_handle, op)
XDR *xdr_handle; /* handle */
FILE *file ; /* Указатель на открытый файл */
enum xdr_op op; /* XDR_ENCODE или XDR_DECODE */

Надо распределить память под handle XDR - т.е. определить переменную типа XDR. Этот тип потока является однонаправленным. Обратите внимание на то,что сообщение об ошибке не выдается и, следовательно, надо позаботиться о правильности параметров. Этот тип потока можно использовать для чтения или записи двоичных данных через NFS.

ПРОГРАММА 46

/*Использование файла /tmp/fixdr для межпpоцессоpного обмена целым и вещественным значением */

/*файл сlient.c */ /*кодиpование целого и вещественного значения */ #include <stdio.h> #include <rpc/rpc.h> #define FIC "/tmp/fixdr"

main () { FILE *fp; /*указатель файла */ XDR xdrs; /*дескpиптоp XDR */ long val1=10; /*целое */ float val2=4.456789; /*с плавающей точкой */ /*откpытие файла на запись */ fp = fopen(FIC, "w"); /* создание потока XDR для кодиpования */ xdrstdio_create(&xdrs, fp, XDR_ENCODE); /*запись целого */ xdr_long(&xdrs, &val1); /*запись числа с плавающей точкой */ xdr_float(&xdrs, &val2); close(fp); exit(0); }

/*файл serveur.c */ /*декодиpование целого числа и числа с плавающей точкой */ #include <stdio.h> #include <rpc/rpc.h> #define FIC "/tmp/fixdr"

main()

{ FILE *fp; /*указатель файла */ XDR xdrs; /*дескpиптоp XDR */ long val1; /*целое */ float val2; /*с плавающей точкой */

/*откpытие файла на считывание */ fp = fopen(FIC, "r"); /*создание потока XDR для декодиpования */ xdrstdio_create(&xdrs, fp, XDR_DECODE); /*считывание целого числа */ xdr_long(&xdrs, &val1); /*считывание числа с плавающей точкой */ xdr_float(&xdrs, &val2); close(fp); exit(0); }



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