网络链接套接字
我正在尝试将结构列表/数组从用户空间发送到内核空间。类似于链接 按照那里的建议,我正在考虑使用我发现的套接字 链接。 Message is set hello in this line
strcpy(NLMSG_DATA(nlh), "Hello");
我尝试了
NLMSG_DATA(nlh) = my_list
这给了我错误:需要左值作为赋值的左操作数。
如何更改它以使用网络链接发送数组/列表?如果不能以这种方式发送,我还能如何轻松地做到这一点?
更新
我的结构
typedef struct {
int val1;
int val2;
} mystruct;
我需要在内核内存中分配一个数组/列表,以便其他系统调用可以访问该列表。
I am trying send a list/array of struct to kernel space from userspace. Similar to Link
As recommended there, I am thinking of using sockets for which i found link. Message is set hello in this line
strcpy(NLMSG_DATA(nlh), "Hello");
I tried
NLMSG_DATA(nlh) = my_list
That gave me error: lvalue required as left operand of assignment.
How can I change this to send an array/list using netlinks? If it can't be send this way, how else easily can I do this?
Update
My structure
typedef struct {
int val1;
int val2;
} mystruct;
I need to allocate an array/list of these in kernel memory so other system calls can access that list.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
NLMSG_DATA()
计算结果为指针右值,因此您需要使用memcpy(NLMSG_DATA(nlh), my_list, sizeof my_list)
等复制函数。确切的细节取决于您的数据结构。大概您需要发送列表条目的数量,然后分别发送每个条目。
NLMSG_DATA()
evaluates to a pointer rvalue, so you need to use a copying function likememcpy(NLMSG_DATA(nlh), my_list, sizeof my_list)
.The exact details will depend on your data structure. Presumably you will want to send the number of list entries, then each entry separately.
您不能使用 netlink 套接字发送基于指针的结构。请参阅netlink的数据包结构:所有数据必须位于单个块中。
You cannot send pointer-based structures using netlink sockets. See the packet structure of netlink: all data must be in a single block.