我正在调试神经节,并通过 UDP 通道使用 XDR 发送数据。我发现函数的第二个参数xdrmem_create ( xdrs, addr, size, op)
很奇怪。其中参数的语法如下:
XDR *xdrs;
char *addr;
u_int size;
enum xdr_op op;
这个函数的参考在这里。
如您所见,该函数的第二个参数(xdrs)是一个字符数组。这同样在神经节的功能之一中声明为char msgbuf[GANGLIA_MAX_MESSAGE_LEN];
。
在 ganglia 中调用上述函数后,通过调用where是一种变量类型的函数,xdrmem_create(&x, msgbuf, GANGLIA_MAX_MESSAGE_LEN, XDR_ENCODE);
将 ganglia 特定结构 ( cb->msg
) 中的适当数据编码为 XDR 格式。xdr_Ganglia_value_msg(&x, &(cb->msg))
x
XDR
稍后,为了通过 UDP 通道发送编码数据,该函数Ganglia_udp_send_message( udp_send_channels, msgbuf, len);
被调用。为了了解这个 XDR 数据是如何发送的,我尝试打印msgbuf
using的内容的输出,fprintf
但它总是不打印任何内容,尽管它是一个字符数组。而且很明显,编码数据发送成功。
所以,我的问题是,编码成 XDR 格式的数据是如何在这里通过 UDP 通道发送的?
我在这里粘贴了来自 ganglia 的部分代码。您可以从第 131 到 136 行看到供您参考。