Этап 6: трансляция и компоновка клиентской программы

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

После подготовки и ввода в файл исходного кода клиентских интерфейсных процедур можно выполнить их трансляцию. Например, файл rdict_cif .с содержит все интерфейсные процедуры для данного примера работы со словарем. В системе Linux для трансляции файла, полученного в результате выполнения описанной выше работы, применяется следующая команда:

сс -с rdict_cif.с 

Транслятор вырабатывает выходной файл rdict_cif.o. Для завершения создания клиентской программы необходимо ввести несколько небольших изменений в первоначальную главную процедуру. Поскольку в новой версии используется технология RPC, для нее требуется включаемый файл на языке С для объявлений RPC. В этой процедуре должен быть также вызван включаемый файл rdict.h, поскольку он содержит объявления констант, применяемых и в клиенте, и в сервере.

В клиентской программе необходимо также объявить и инициализировать дескриптор, который может использоваться в процедурах связи RPC для обмена данными с сервером. В большинстве клиентов такой дескриптор объявляется с применением заранее определенного типа CLIENT и инициализируется путем вызова библиотечной процедуры RPC, а именно clnt_create. Пример необходимого для этого кода приведен в файле rdict.с:

/* Файл rdict.с - главная процедура, процедура nextin */
tinclude 
tinclude  tinclude  tinclude 
tinclude "rdict.h"
tdefine    MAXWORD    50       /* Максимальная длина команды или слова */
tdefine    RMACHINE    "localhost"    /* Имя удаленного компьютера */
CLIENT *handle;	/* Дескриптор для удаленной процедуры */
int    nextin(char *cmd, char *word), initw(), insertw(char *word); int    deletew(char *word), lookupw(char *word);
 

Сравните файл rdict.с с файлом dictl.c6, на основе которого он был создан, чтобы убедиться в том, что при этом потребовалась совсем небольшая доработка. В данном примере кода используется символическая константа RMACHINE для обозначения доменного имени удаленного компьютера. В целях упрощения отладки константа RMACHINE объявлена со значением localhost, а это означает, что клиент и сервер будут работать на одном и том же компьютере. Безусловно, после завершения отладки распределенной программы программист может изменить это определение, указав постоянное местонахождение сервера.

Библиотечная процедура clnt_create предпринимает попытки установить соединение с указанным удаленным компьютером. Бели эта попытка соединения заканчивается неудачей, процедура clnt_create возвращает значение NULL, чтобы приложение могло передать пользователю сообщение об ошибке. В рассматриваемом примере кода при получении сообщения об ошибке от процедуры clnt_create программа завершает свою работу. На практике в клиентской программе можно выбрать вариант повторного выполнения соединения или попытаться установить соединение с одним из компьютеров, список которых ведется в этой программе.

После трансляции файла rdict.с и получения соответствующего файла объектного кода все файлы, входящие в состав клиентской программы, могут быть скомпонованы редактором связей для получения выполняемой программы. В системе Linux редактор связей для обработки файлов с расширением .о вызывается с помощью команды сс, которая может быть введена в командной строке с опцией -о для вывода полученных результатов в указанный файл. Например, приведенная ниже командная строка позволяет связать друг с другом все необходимые файлы .о и поместить полученную в результате выполняемую клиентскую программу в файл rdict:

сс -о rdict rdict.о rdict_clnt.o rdictjcdr.o rdict_cif.o