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