我的目标是在内核内存中始终有一个数组或列表,以便它总是可以从内核空间访问。为此,我使用这里推荐的netlink套接字。我关注this example,它展示了如何发送字符串。我不知道如何在套接字中发送结构数组或结构列表。
typedef struct {
int fiveDollarBills;
int denDollarBills;
} Bills;
是否可以使用netlink发送列表或数组?
最佳答案
NetLink本身并不关心数据是否是字符串、整数、结构等。它只需要一个void*和一个length,然后复制数据而不查看它。您可以将结构强制转换为void*并使用sizeof来确定长度并通过netlink发送数据。
在另一端,您只需要获取void*和length,验证长度是否是它应该的长度,然后将void*转换回指向结构的指针。要核实的两件重要事情是:
UserSpace和KernelSpace代码都同意结构的内存布局。这意味着对同一个.h进行编译,并确保编译选项使内存布局和对齐方式相同。
Stutt将作为一个原始内存拷贝传输,没有固定指针的智能,所以你的结构不能包含任何指针等。
另一种方法是不发送原始数据accross,而是通过将数据转换为已知格式的字符串来“序列化”数据。这将允许您以额外的CPU和内存开销为代价来处理更复杂的数据结构
关于c - 使用netlink进行内核空间用户空间通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4440584/