linux 驱动链表使用

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple Hello World Kernel Module");
MODULE_VERSION("1.0");

#include <linux/list.h>
#include <linux/slab.h>

// 定义黑名单节点结构体
struct black_list_entry {
    char name[50];          // 假设黑名单条目包含一个名字
    struct list_head list;  // 链表节点,用于将该结构体链接到链表中
};

// 定义并初始化黑名单链表头部
static LIST_HEAD(black_list);

// 添加数据到黑名单链表
void add_to_black_list(const char *name) {
    struct black_list_entry *entry;

    // 分配内存
    entry = kmalloc(sizeof(*entry), GFP_KERNEL);
    if (!entry)
        return;

    // 初始化节点数据
    strncpy(entry->name, name, sizeof(entry->name) - 1);
    entry->name[sizeof(entry->name) - 1] = '\0'; // 确保字符串以'\0'结尾

    // 初始化链表节点
    INIT_LIST_HEAD(&entry->list);

    // 将节点添加到黑名单链表中
    list_add(&entry->list, &black_list);
}

void print_black_list(void) {
    struct black_list_entry *entry;

    list_for_each_entry(entry, &black_list, list) {
        printk(KERN_INFO "Black list entry: %s\n", entry->name);
    }
}


static int __init hello_init(void) {
    printk(KERN_INFO "Hello, World!\n");
    add_to_black_list("fff");
    print_black_list();
    return 0;
}

static void __exit hello_exit(void) {
    printk(KERN_INFO "Goodbye, World!\n");
}

module_init(hello_init);
module_exit(hello_exit);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值