Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 了解XDR规范以创建*.x文件_C_Rpc_Xdr_Sunrpc - Fatal编程技术网

C 了解XDR规范以创建*.x文件

C 了解XDR规范以创建*.x文件,c,rpc,xdr,sunrpc,C,Rpc,Xdr,Sunrpc,我一直在浏览Internet上的几个网站,实际上想知道如何在.x文件中编写规范,以便在.c文件中为RPC生成等效函数。我访问过的每个站点都建议在*.x文件中使用以下类型的规范: program ADD_PROG { version ADD_VERS { int ADD(intpair) = 1; } = 1; } = 0x23451111; 因此,为了实际理解,我从一个名为ganglia的开源项目获得了一些信息,并使用rpcgen生成了等效的C源代码()

我一直在浏览Internet上的几个网站,实际上想知道如何在.x文件中编写规范,以便在.c文件中为RPC生成等效函数。我访问过的每个站点都建议在*.x文件中使用以下类型的规范:

program ADD_PROG { 
    version ADD_VERS { 
        int ADD(intpair) = 1; 
    } = 1; 
} = 0x23451111;
因此,为了实际理解,我从一个名为ganglia的开源项目获得了一些信息,并使用rpcgen生成了等效的C源代码()和C头文件()

[rohit@ganglia-server rpc]$ rpcgen -C gm_protocol.x 
[rohit@ganglia-server rpc]$ 
[rohit@ganglia-server 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等的规范)


请帮助学习这些规范。

通常,从.x文件生成三组代码:消息xdr编码器/解码器功能、客户端存根和服务器存根(当然,您也可以手动完成,但要正确完成这项工作需要做太多的工作)。使用-a选项运行rpcgen也可以生成客户机、服务器sthus和示例实现。首先尝试使用一个简单的示例:

program STRLEN {
  version STRLENVERS {
    int strlen(string) = 1;
  } = 1;
} = 117;
规范
程序
是RPCL的一部分,但属于XDR语言。如果将上述规范放在test.x文件中,并使用
rpcgen-ctest.x
运行它,那么他/她就会得到

测试h, 测试svc.c, 测试c

如果不需要任何服务器或客户机存根,只需要XDR的编码器和解码器功能,那么每个规范,如enum、struct、union、,文件gm_protocol.x中的etc将在gm_protocol.h中生成其等效的基于C的声明,其相应的XDR编码器和解码器函数将在gm_protocol_XDR.C中生成,这是问题中指定的情况

运行
rpcgen-a gm_protocol.x
将生成gm_protocol_svc.cgm_protocol_clnt.c,而无需任何函数

以下是一些XDR规范:


查看旧的SUN文档

该链接似乎很有用,但这并不能回答我的问题。我的问题是gm_protocol.x不包含任何规范作为
程序STLEN{
,但rpcgen仍然可以创建包含函数的gm_protocol_xdr.c文件。根据“Richard Stevens编写的Unix网络编程第二卷”:RPC规范(RFC 1831)表示RPC语言(有时称为RPCL)与XDR语言(在RFC 1832中定义)相同,只是添加了程序定义(描述了程序、版本和过程).那么,这些函数是如何在这里创建的呢?rpcgen将为.x文件中定义的任何结构和枚举生成一个编码器/解码器函数。XDR编码的消息是一个字节数组,您需要将它们转换为相应的类型。这就是我之前所想的。因此,这意味着不需要放入
程序STRLEN{
在.x文件中生成编码器/解码器函数。此确认为+1。我将编辑您的答案并添加使答案完整的内容。谢谢。