【发布时间】:2014-09-22 19:32:52
【问题描述】:
我正在调试ganglia,并通过 UDP 通道使用 XDR 发送数据。
我发现函数xdrmem_create ( xdrs, addr, size, op) 的第二个参数很奇怪。
其中参数的语法如下:
XDR *xdrs;
char *addr;
u_int size;
enum xdr_op op;
这个函数的引用是here。
如你所见,这个函数的第二个参数(xdrs)是一个字符数组。这同样在神经节的函数之一中声明为char msgbuf[GANGLIA_MAX_MESSAGE_LEN];。
在 ganglia 中以 xdrmem_create(&x, msgbuf, GANGLIA_MAX_MESSAGE_LEN, XDR_ENCODE); 调用上述函数后,通过调用函数 xdr_Ganglia_value_msg(&x, &(cb->msg)) 将 ganglia 特定结构 (cb->msg) 中的适当数据编码为 XDR 格式,其中 x 是 XDR 类型的变量.
稍后,为了通过UDP通道发送编码数据,函数Ganglia_udp_send_message( udp_send_channels, msgbuf, len);被调用。
为了了解这个 XDR 数据是如何发送的,我尝试使用 fprintf 打印 msgbuf 的内容的输出,但它总是不打印任何内容,尽管它是一个字符数组。而且编码数据发送成功也是很明显的。
所以,我的问题是,编码成 XDR 格式的数据是如何通过 UDP 通道发送的?
我粘贴了来自 ganglia here 的部分代码。从131到136行可以看到,供大家参考。
【问题讨论】:
-
这个字符数组是否包含0字节?
-
我曾尝试使用
strlen()打印msgbuf的长度,但它总是返回零。而sizeof()返回 8。