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 создает:
В случае использования опции -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, и в значительной степени зависит от компьютера.