我试图根据这个答案将LKM中的结构发送到用户区:Netlink Sockets in C using the 3.X linux kernel@H_301_2@
答案本身的代码是完全可编译的,但是当我尝试发送结构而不是char *时,我会在userland中获得段错误.@H_301_2@
这是我改变的:@H_301_2@
netlinkKernel.c@H_301_2@
我加:@H_301_2@
@H_301_2@
typedef struct test{
int a;
char *b;
} s_test;
并替换@H_301_2@
@H_301_2@
char *msg = "Hello from kernel";
---
msg_size = strlen(msg);
---
strncpy(nlmsg_data(nlh),msg,msg_size);
同@H_301_2@
@H_301_2@
s_test x;
x.a = 42;
x.b = "The answer";
---
msg_size(sizeof(x));
---
memcpy(nlmsg_data(nlh),&x,msg_size);
netlinkUser.c@H_301_2@
@H_301_2@
printf("Received message payload: %s\n",(char *)NLMSG_DATA(nlh));
同@H_301_2@
@H_301_2@
s_test *x = (s_test *)NLMSG_DATA(nlh);
printf("Received message payload: %d - %s\n",x->a,x->b);
问题出在哪儿?
最佳答案