我尝试使用netlink套接字将二进制数据从内核空间发送到用户空间。我学习了如何使用netlink套接字与内核模块通信?的例子
然而,在用户空间的接收端,我得到的数据长度要大于从内核空间发送的数据长度。然而,数据是相同的。数据被附加了一些垃圾值。
在netlink套接字中,接收到的数据长度是否与从内核空间发送的数据相同?
发布于 2014-04-22 14:06:18
您可能需要检查文档,以确保您正确地使用了"NLMSG_SPACE“、"NLMSG_PAYLOAD”和"NLMSG_DATA“等宏。
额外的数据可能来自数据帧中未使用的部分,而您的程序没有正确读取消息长度。(实际上,没有正确使用宏。)例如,如果您发送一个字节,我相信实际上会有4个字节发送,因为NLMSG_SPACE会将数据包中的数据“对齐”到4的倍数。
读取它应该是没有问题的,只是使用宏获得真实的数据长度,并且只读取那么多。
下面是一个获取缓冲区指针和缓冲区长度的示例。
// Get a pointer to the start of the data in the buffer and the buffer (payload) length
buf = (u_char *) (NLMSG_DATA(nlh));
len = NLMSG_PAYLOAD(nlh, 0);
以下是宏的定义。,如果你愿意的话,看看那些。这里的情况可能更容易理解。
您链接到的代码是发送字符,并通过“memset”将数据传递到0,这样打印char数组就可以了。
希望这能有所帮助。如果你不能让它工作的话,发布一些代码。
https://stackoverflow.com/questions/23170571
复制