КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Запрос к процедуре-серверу
Диспетчеризация запросов к процедурам-серверам Регистрации процедуры-сервера Регистрация процедуры в качестве сервера на узле сети выполняется функцией registerrpc, имеющей следующий вид #include <sys/types.h> #include <rpc/rpc.h> int registerrpc (prognum, vernum, procnum, procname, inproc, outproc) u_long prognum; u_long vernum; u_long procnum; char *(*procname) (); xdrproc_t inproc; xdrproc_t outproc; Аргументы prognum, vernum и procnum задают номера программы, версии и процедуры соответственно. Номера версии и процедуры назначаются программистом произвольно. Номер же программы, находящейся в стадии разработки, должен назначаться из диапазона 0x20000000...0x3fffffff. Аргумент procname задает функцию языка программирования СИ, регистрируемую в качестве сервера. Эта функция (процедура) вызывается с указателем на ее аргумент и должна возвращать указатель на свой результат, располагаемый в статической или динамически выделенной (функциями malloc или calloc) памяти. Для хранения результата нельзя использовать автоматически выделяемую память (напоминаем, что локальные переменные функций располагаются именно в такой памяти). Аргументы inproc и outproc задают XDR-функции преобразования, соответственно, аргумента и ее результата. При успешном выполнении функция registerrpc возвращает 0, иначе - число "-1".
Для приема запросов к процедурам-серверам от клиентов и диспетчеризации их используется функция svc_run, имеющая следующий вид #include <rpc/rpc.h> void svc_run (); Не имеющая аргументов функция svc_run должна вызываться после регистрации всех диспетчируемых ею процедур-серверов. При успешном выполнении svc_run никогда не возвращает управление в вызвавшую ее программу.
Для запроса к удаленной процедуре-серверу из программы-клиента используется функция callrpc, имеющая следующий вид #include <sys/types.h> #include <rpc/rpc.h> int callrpc (host, prognum, vernum, procnum, inproc, in, outproc, out) char *host; u_long prognum; u_long vernum; u_long procnum; xdrproc_t inproc; char *in; xdrproc_t outproc; char *out; Аргумент host задает имя узла, на котором функционирует вызываемая процедура-сервер (первоначально, в качестве тренировки, можно в качестве имени узла указать имя того же самого компьютера, на котором выполняется клиент). Аргументы prognum, vernum и procnum задают номера программы, версии и, собственно, вызываемой процедуры-сервера. К моменту вызова процедуры она должна быть зарегистрирована на узле сети, определяемом аргументом host. Аргумент in должен указывать на данные, передаваемые процеду- ре-серверу в качестве аргумента. Аргумент out должен указывать на область памяти, предназначенную для размещения в ней результата работы процедуры-сервера. Аргументы inproc и outproc задают XDR-функции преобразования, соответственно, аргумента процедуры-сервера и ее результата. На время обработки процедурой-сервером запроса к ней программа-клиент переходит в состояние ожидания результата. При успешном выполнении вызова удаленной процедуры-сервера функция registerrpc возвращает 0, иначе - число "-1".
Дата добавления: 2017-02-01; Просмотров: 80; Нарушение авторских прав?; Мы поможем в написании вашей работы! |