Я искал через несколько веб-сайтов в Интернете и на самом деле хотели бы знать, как мы пишем спецификации в файле .x генерировать эквивалентные функции в .c файл для RPC. Каждый сайт, я посетил предложил использовать следующий вид спецификации в * .x файл:Понимание спецификации XDR создать * .x файл
program ADD_PROG {
version ADD_VERS {
int ADD(intpair) = 1;
} = 1;
} = 0x23451111;
Таким образом, чтобы понять практически, я получил gm_protocol.x из открытого источника проекта, известный как ганглии и сгенерированный исходный код эквивалентен C (gm_protocol_xdr.c) и заголовочный файл C (gm_protocol.h) с использованием rpcgen.
[[email protected] rpc]$ rpcgen -C gm_protocol.x
[[email protected] rpc]$
[[email protected] rpc]$ ll
total 24
-rw-rw-r-- 1 rohit rohit 5786 Oct 28 17:52 gm_protocol.h
-rw-rw-r-- 1 rohit rohit 3485 Oct 28 15:04 gm_protocol.x
-rw-rw-r-- 1 rohit rohit 8213 Oct 28 17:52 gm_protocol_xdr.c
К моему удивлению, от того, что я узнал и понял, gm_protocol.x не содержит таких RPC спецификации, указанные в коде выше, но все же он может генерировать слишком много функций в файле gm_protocol_xdr.c.
Я уверен, что я не могу понять спецификации XDR, потому что либо я консультировался с неправильными источниками, либо они устарели. Я не мог найти учебник, который мог бы объяснить способ генерации функций (хотя я нашел спецификации для создания struct, enum, union и т. Д.).
Пожалуйста, помогите изучить эти спецификации.
Ссылка, кажется, быть полезным, но это не ответ на мой вопрос. Мой вопрос: ** gm_protocol.x ** не содержит никакой спецификации как «программа STLEN {', но все же rpcgen может создавать ** gm_protocol_xdr.c ** файл, содержащий функции. В соответствии с «Unix Network Programming Vol 2 от Richard Stevens»: ** В спецификации RPC (RFC 1831) говорится, что язык RPC, иногда называемый RPCL, идентичен языку XDR (который определен в RFC 1832), за исключением для добавления определения программы (которое описывает программу, версии и процедуры). ** Итак, как эти функции созданы здесь? – Rohit
rpcgen генерирует функцию кодера/декодера для любой структуры и перечисления, определенных в файле .x. Кодированное сообщение XDR представляет собой массив байтов, и вам необходимо преобразовать их в соответствующие типы. – kofemann
Это то, что я думал раньше. Таким образом, это означает, что нет необходимости помещать 'program STRLEN {' в файл **. X ** для генерации функций кодировщика/декодера. +1 для этого подтверждения. Я отредактирую ваш ответ и добавлю, что делает ответ полным. Благодарю. – Rohit