Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过从用户复制链接列表传递链接列表_C_Linux_Linux Kernel_Linked List_System Calls - Fatal编程技术网

C 通过从用户复制链接列表传递链接列表

C 通过从用户复制链接列表传递链接列表,c,linux,linux-kernel,linked-list,system-calls,C,Linux,Linux Kernel,Linked List,System Calls,我在做一个linux项目。我需要从用户空间程序向内核传递一个链表。我使用了在用户空间中实现链表的内核方法。我已将结构定义如下: 结构时间{ int-val; 结构列表\头*列表; }; 此结构的变量为: struct time mylist; 我已经给出了输入数据,并使用linux/include/list.h中的list_add函数来链接这些结构。 此mylist是另一个结构的一部分: struct params{ int data1; struct time* mylist; }; 假设

我在做一个linux项目。我需要从用户空间程序向内核传递一个链表。我使用了在用户空间中实现链表的内核方法。我已将结构定义如下:

结构时间{ int-val; 结构列表\头*列表; };

此结构的变量为:

struct time mylist;
我已经给出了输入数据,并使用linux/include/list.h中的list_add函数来链接这些结构。 此mylist是另一个结构的一部分:

struct params{
int data1;
struct time* mylist;
};
假设我获取所有数据并将其存储在

struct params param;

现在,如果我将
¶m
传递给一个系统调用,并在那里使用
copy\u from\u user()
函数,我能访问列表吗?我读到我不能在内核空间中取消引用指针(指向用户空间中的数据),我必须在中再次使用
copy\u from\u user
函数。有人能给我建议一种将此列表传递到内核空间的可能方法吗?

对于每个节点,在内核空间中创建一个新节点,通过
copy\u from\u user()
在中复制用户空间节点,并更新指向新创建的内核空间节点的指针。重复这太乱了。考虑一个不同的API来与内核对话。@彼得我读到MMAP()可以用来共享用户空间和内核空间之间的内存。但我不是在研究内核模块。在我的例子中,mmap()可以工作吗?我不知道你说的“你没有在内核模块上工作”是什么意思。模块和主内核并不重要。否,
mmap()
对链表没有帮助,因为内核空间和用户空间对于同一内存仍然有不同的虚拟地址,这意味着列表的“下一个”指针对于每个内存都需要不同。实际上,链表不是与内核通信的合适结构。