Этап 4: выполнение программы rpcgen

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

После разработки спецификации выполняется программа rpcgen для проверки на отсутствие синтаксических ошибок и создания четырех файлов кода, как показано на рис. 22.5. В системе Linux, как и в большинстве версий UNIX, команда вызова этой программы имеет форму:

rpcgen rdict.x 

В программе rpcgen при формировании имен четырех выходных файлов используется имя входного файла. Например, поскольку имя входного файла начинаётся с rdict, выходные файлы получают имена rdict.h, rdict_clnt.c, rdictjsvc.c и rdictjcdr.c. скачать аську на компьютер без регистрации

Файл .h, сформированный программой rpcgen

В листинге 23.1 показано содержимое файла rdict.h, который включает допустимые объявления С для всех констант и типов данных, объявленных в файле спецификации. Кроме того, программа rpcgen добавляет в него определения удаленных процедур. В этом примере кода программа rpcgen определила константу с именем INSERTW, состоящим из прописных букв, равную 2, поскольку процедура INSERTW, объявленная в спецификации, является второй процедурой в удаленной программе.

Объявления внешних процедур в файле rdict.h требуют пояснения. Объявленные процедуры представляют собой интерфейсную часть серверной заглушки. Имена процедур были сформированы путем преобразования в нижний регистр имен объявленных процедур, добавления символа подчеркивания и номера версии программы. Например, в рассматриваемом файле спецификации объявлено, что удаленная программа содержит процедуру DELETEW, поэтому файл dict.h включает объявление extern для процедуры deletew_l. Чтобы лучше понять, почему программа rpcgen сформировала объявления этих интерфейсных процедур, напомним назначение интерфейсной части заглушки: она позволяет пользователю программы rpcgen выбрать собственные соглашения по вызову процедур и оставить неизменными первоначальные вызываемые процедуры.

В качестве примера именования интерфейсной заглушки рассмотрим процедуру insertw. Первоначальная процедура войдет в состав сервера и останется неизменной. Поэтому серверная программа должна включать процедуру insertw, имеющую те же параметры, что и в первоначальном приложении. Для предотвращения конфликта имен в сервере для интерфейсной процедуры-заглушки должно использоваться другое имя. Программа rpcgen предусматривает использование для серверной заглушки связи вызова интерфейсной процедуры-заглушки с именем insertw_l. В этом вызове используются параметры, выбранные программой rpcgen, а программисту предоставляется возможность разработать процедуру insertw_l таким образом, чтобы она вызывал процедуру insertw с использованием правильных параметров.

Бели какой-либо конкретный выходной файл должен остаться пустым, программа rpcgen его не создает. Поэтому при обработке некоторых спецификаций формируется менее четырех файлов.

Файл вызова процедур преобразования XDR, сформированный программой rpcgen

Программа rpcgen вырабатывает файл, содержащий вызовы процедур, которые выполняют преобразования XDR для всех типов данных, объявленных в удаленной программе. Например, файл rdictjcdr.c, показанный в листинге 23.2, содержит вызовы процедур преобразования типов данных, объявленных в программе базы данных словаря.

В данном примере единственное объявление типа, которое присутствует в файле спецификации, имеет имя example. Это объявление определяет структуру, имеющую одно целочисленное и одно символьное поле. Файл rdictjcdr.c содержит код, необходимый для прямого и обратного преобразования структуры типа example из внутреннего представления данных во внешнее. В коде, который был сформирован автоматически программой rpcgen, содержатся вызовы процедур библиотеки XDR для каждого поля структуры. Непосредственно после объявления объявленный тип может применяться для обозначения параметров удаленных процедур. Если в одной из удаленных процедур структура example используется в качестве параметра, то программа rpcgen вырабатывает код и в клиентской, и в серверной части для вызова процедуры xdr_example, выполняющей необходимое преобразование.

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