rpcgen
Компилятор
протокола RPC
Синтаксис:
rpcgen входной_файл
rpcgen
-a|-c|-h|-l|-m|-Sc|-Ss [-o выходной_файл] [входной_файл]
[-C] [-D макрос[=значение]]
[-L] [-K секунды]
rpcgen -s транспортный_протокол
[-o выходной_файл] [входной_файл]
Поддерживаемые платформы:
Neutrino
Опции:
-a
Создать все файлы, включая
пример программы для клиента и сервера.
-C
Создать
программу ANSI C. Эта опция также используется для создания
программы, которая может быть скомпилирована с помощью
компилятора C++.
-c
Скомпилировать
в подпрограммы XDR.
-D макрос[=значение]
Определить макрос. Эта опция эквивалентна директиве #define в источнике. Если аргумент значение не задан, значение по умолчанию
равно 1. Эту опцию можно указать несколько раз.
-h
Скомпилировать
в определения данных C (заголовочный файл).
-K секунды
Завершить работу по истечении периода бездействия,
определяемого аргументом секунды. Значение по
умолчанию – 120 секунд. Опция -K 0 означает, что утилита завершается сразу
после выполнения запроса (что целесообразно, если сервер
запущен с помощью inetd). Опция -K -1 деактивирует контроль бездействия,
поэтому сервер работает непрерывно.
-L
Использовать
для формирования отчетов об ошибках функцию syslog(). Для перехвата
регистрируемых сообщений требуется сначала запустить утилиту syslogd.
-l
("эль")
Скомпилировать как программные заглушки на стороне клиента.
-m
Скомпилировать как программные заглушки на стороне
сервера, но не создавать основную подпрограмму. Эта опция
удобна для выполнения подпрограмм обратного вызова или для
записи собственной основной подпрограммы с целью
инициализации.
-o выходной_файл
Использовать указанный выходной файл. Если файл не
указан, утилитаrpcgen использует
стандартный поток вывода (только режимы -c, -h, -l, -m, -Sc, -Ss и -s).
-s транспортный_протокол
Скомпилировать как программные заглушки на стороне
сервера с использованием указанного транспортного протокола.
Компилятор поддерживает транспортные протоколы udp и tcp (по умолчанию
используется udp). Для
компиляции сервера, обслуживающего несколько транспортных
протоколов, эту опцию можно указать несколько раз. Транспортные_протоколы определяются во
время выполнения, а не во время компиляции.
-Sc
Создать пример программы на стороне клиента с целью
демонстрации использования удаленной процедуры и привязки
сервера перед вызовом программных заглушек на стороне клиента,
созданных утилитой rpcgen.
-Ss
Создать
скелетную программу для удаленной процедуры на стороне сервера.
Для удаленных процедур потребуется дополнить существующую
программу.
входной_файл
Использовать указанный входной файл. Если входной
файл в режимах -c, -h, -l, -m и -s не указан, утилита rpcgen использует стандартный поток
ввода.
Описание:
Компилятор rpcgen создает код на языке C для
реализации протокола RPC. На входе rpcgen использует язык, аналогичный языку
C, – вызов удаленных процедур (Remote Procedure Call). Для
получения дополнительной информации об этом языке
рекомендуется ознакомиться с книгой Power
Programming with RPC ("Профессиональное
программирование на RPC") Джона Блумера (John Bloomer),
O'Reilly & Associates, 1992. ISBN: 0937175773.
Обычно
утилита rpcgen выполняется в
начальной форме, при которой из одного входного файла
создаются четыре выходных файла. Например, если указан входной_файл proto.x, то утилита rpcgen создает:
-
заголовочный файл в proto.h;
-
подпрограммы XDR в proto_xdr.c;
-
программные заглушки на
стороне сервера в proto_svc.c;
-
программные заглушки на
стороне клиента в proto_clnt.c.
В случае использования опции -Sc создается пример программы,
демонстрирующей использование удаленных процедур на стороне
клиента. Эта программа создается в proto_client.c. В случае использования
опции -Ss создается
пример программы на стороне сервера, демонстрирующей запись
удаленных процедур. Эта программа создается в proto_server.c.
Если
необходимо создать только один из указанных выходных файлов,
используются другие формы синтаксиса.
После
создания сервера его можно запустить с помощью мониторов порта
(например, inetd или listen) или автоматически. В случае
запуска с помощью монитора порта серверы создаются только для
транспортного протокола, для которого был передан дескриптор
файла 0. Имя транспортного протокола определяется с помощью
переменной среды PM_TRANSPORT. Во время работы сервера,
созданного утилитой rpcgen, для всех
транспортных протоколов, указанных в переменной среды NETPATH,
создаются описатели сервера; если она не указана, создаются
описатели сервера для всех видимых транспортных протоколов из
файла /etc/netconfig.
Если
необходимо создать только один из указанных выходных файлов,
используются другие формы синтаксиса. Если для утилиты rpcgen задана опция -s, серверы создаются для
указанного класса транспортных протоколов. Если для утилиты
задана опция -n, сервер
создается для транспортного протокола, определенного netid. Если входной файл не указан,
утилита rpcgen принимает
стандартный поток ввода.
Компилятор C
используется для предварительной обработки всех входных файлов
до их фактической интерпретации утилитой rpcgen, поэтому все директивы
препроцессора во входном файле rpcgen разрешены. Для каждого типа
выходного файла утилита rpcgen определяет
специальный символ:
Символ,
определяемый rpcgen:
|
Компиляция в:
|
RPC_HDR
|
Заголовочные файлы
|
RPC_XDR
|
Подпрограммы XDR
|
RPC_SVC
|
Программные
заглушки на стороне сервера
|
RPC_CLNT
|
Программные
заглушки на стороне клиента
|
Кроме того, утилита rpcgen выполняет самостоятельную
предварительную обработку. Она оставляет строки, начинающиеся
с %, без
интерпретации и передает их напрямую в выходной файл.
Для
настройки некоторых подпрограмм XDR связанные типы данных
можно оставить не определенными. Для каждого не определенного
типа данных утилита rpcgen предполагает
наличие подпрограммы, имя которой начинается с xdr_ и заканчивается
именем не определенного типа.
Предупреждения:
Компилятор
не поддерживает вложенность. Однако такого результата можно
достичь путем определения структур на высшем уровне и
употребления их имен в других структурах.
При
использовании определений программ возможны конфликты имен,
связанные с тем, что очевидные ограничения неприменимы.
Большинства таких конфликтов можно избежать за счет присвоения
программам, версиям, процедурам и типам уникальных имен.
Программа
сервера, созданная с помощью опции -n, относится к транспортному
протоколу, определенному netid, и в
значительной степени зависит от компьютера.