开发者社区> 问答> 正文

将元素两次添加到Linux内核双链表

我正在尝试在用户空间中使用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 两次

展开
收起
祖安文状元 2020-01-08 15:06:53 509 0
1 条回答
写回答
取消 提交回答
  • Linux链表不支持多次添加节点。您不能将它两次添加到同一列表中,也不能将其添加到两个不同的列表中。

    2020-01-08 15:06:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载