我正在尝试在用户空间中使用https://github.com/torvalds/linux/blob/master/include/linux/list.h中提到的linux内核双链表实现,可以在其用户空间中找到它在https://gist.github.com/roychen/1710968
以下是我最初使用的代码,它可以正常工作:)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "list.h"
struct Node
{
int data;
char name[10];
struct list_head mylist;
};
int main()
{
LIST_HEAD(plist);
struct Node node1 = {.data = 10, .name = "node1", .mylist = LIST_HEAD_INIT(node1.mylist)};
struct Node node2;
node2.data = 20;
strcpy(node2.name, "node2");
INIT_LIST_HEAD(&node2.mylist);
list_add_tail(&node1.mylist, &plist);
list_add_tail(&node2.mylist, &plist);
struct Node* iter;
list_for_each_entry(iter, &plist, mylist)
{
printf("name = %s, data = %d\n", iter->name, iter->data);
}
return 0;
}
上面代码的输出是
name = node1, data = 10 name = node2, data = 20 正如预期的那样。
现在假设我要添加node1 两次
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。