gpt4 book ai didi

c - 了解函数 "xdrmem_create"中的第二个参数

转载 作者:行者123 更新时间:2023-11-30 15:29:54 26 4
gpt4 key购买 nike

我正在调试ganglia并通过 UDP channel 使用 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]; .

将上述函数调用为 xdrmem_create(&x, msgbuf, GANGLIA_MAX_MESSAGE_LEN, XDR_ENCODE); 后在神经节中,通过调用函数 cb->msg 将神经节特定结构 ( xdr_Ganglia_value_msg(&x, &(cb->msg)) ) 中的适当数据编码为 XDR 格式。哪里xXDR变量类型。

之后,要通过UDP channel 发送编码后的数据,函数Ganglia_udp_send_message( udp_send_channels, msgbuf, len);叫做。为了了解这个XDR数据是如何发送的,我尝试打印 msgbuf 内容的输出使用fprintf但它总是不打印任何内容,尽管它是一个字符数组。也可以看出编码数据发送成功。

所以,我的问题是,编码成 XDR 格式的数据是如何通过 UDP channel 发送的?

我粘贴了 ganglia here 的部分代码。您可以从第 131 到 136 行看到供您引用。

最佳答案

消息使用 XDR(一种二进制格式)进行编码。使用的 XDR 库很旧,现代版本的 API 可能会使用 uint8_t 而不是 char。尽管它使用 char,但它是二进制数据 - 即您不能将数据打印为字符串。

如果您想打印此数据,请使用循环将每个字节打印为十六进制,例如通过执行 printf("%02X ", msgbuf[i]);

阅读RFC4506了解 XDR 编码。实际消息以 XDR 语言规范进行描述,并通过代码生成工具(例如 rpcgen 用于 C 代码)运行以生成用于编码/解码的代码。请参阅https://github.com/fastly/ganglia/blob/master/lib/gm_protocol.x用于 Ganglia 定义的消息定义。

关于c - 了解函数 "xdrmem_create"中的第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25972851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com