美文网首页
2020-11-07使用内核链表

2020-11-07使用内核链表

作者: sxs7 | 来源:发表于2020-11-07 00:16 被阅读0次
    [root@localhost tst]# dmesg
    [  668.111872] --------------------------------
    [  668.111875] sxs4 val4 1
    [  668.111876] sxs3 val3 1
    [  668.111876] sxs2 val2 1
    [  668.111877] sxs1 val1 1
    [  668.111877] sxs0 val0 1
    [  668.111878] --------------------------------
    [  668.111879] sxs3 val3 1
    [  668.111879] sxs2 val2 1
    [  668.111880] sxs1 val1 1
    [  668.111880] sxs0 val0 1
    
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/init.h>
    #include <linux/slab.h>
    #include <linux/list.h>
    
    typedef struct _krc_pcr_node
    {
        char * path;
        char * value;
        long long cnt;
        struct list_head list;
    } node_info;
    
    struct list_head node_list;  
    
    int mylist_init(void)
    {
        int i = 0;
        node_info *node, *cur_node;
        struct list_head *pos, *another;    
        
        INIT_LIST_HEAD(&node_list);  
        
        
        
        for (i = 0; i < 5; i++) {
            node = vmalloc(sizeof(node_info));
            memset(node, 0, sizeof(node_info));
            node->path = vmalloc(8);
            memset(node->path, 0, 8);
            sprintf(node->path, "sxs%d", i);
            node->value = vmalloc(8);
            memset(node->value, 0, 8);
            sprintf(node->value, "val%d", i);
            node->cnt++;        
            list_add( &(node->list), &node_list);
        }
        
        printk("--------------------------------\n");
        list_for_each_safe(pos, another, &node_list) {
            cur_node = list_entry(pos, node_info, list);
            printk("%s %s %lld\n", cur_node->path, cur_node->value, cur_node->cnt);
            if (!strcmp(cur_node->path, "sxs4")) {
                list_del(&(cur_node->list));
            }
        }
        
        printk("--------------------------------\n");
        list_for_each(pos, &node_list) {
            cur_node = list_entry(pos, node_info, list);
            printk("%s %s %lld\n", cur_node->path, cur_node->value, cur_node->cnt);
        }
        
        return 0;
    }
    
    void mylist_exit(void)
    {
        return;
    }
    
    module_init(mylist_init);
    module_exit(mylist_exit);
    
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("SXS");
    MODULE_DESCRIPTION("List Module");
    MODULE_ALIAS("List module");
    
    obj-m+=link.o
    all:
        make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
    clean:
        make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
    

    相关文章

      网友评论

          本文标题:2020-11-07使用内核链表

          本文链接:https://www.haomeiwen.com/subject/oitfbktx.html