链表与基树(list and radix_tree)实例

//All right revsered by yoki2009
//mailto:imj040144@tom.com
微出版 www.epube.biz 相信梦想无界

//不解释,看程序:)
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/jiffies.h>
#include <linux/vmalloc.h>
#include <linux/delay.h>
#include <linux/list.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/blkdev.h> //radix_tree_insert等函数

static struct list_head       todo_list;
static struct radix_tree_root tree_data;

static int __init tree_list_init(void)
{
 //List
 /*
 Linux自己提供了list链表来对数据进行管理
 struct list_head
 {
  struct list_head *next,*prev;
 };
 */
 struct list_head list_data;
 //初始化链表头
 INIT_LIST_HEAD(&todo_list);
 //
 struct list_store
 {
  int   pdata;  //实际数据存储,当然你可以自己定义任何数据结构
  struct list_head node;//维护链表
 };
 
 struct list_store *pstore[5];
 int i=0;
 for (i=0;i<5 ;i++ )
 {
  if (!(pstore[i] = (struct pstore *)vmalloc(sizeof(struct list_store))))
  {
   break;
  }
  //为实际数据赋值
  pstore[i]->pdata = i;
  //将自定义的结构体链入链表
  list_add_tail(&pstore[i]->node,&todo_list);
  printk("[Enter circle]List data %d/n",pstore[i]->pdata);
 } 

 struct list_head *p;
 int count = 0;
 list_for_each(p,&todo_list)
 {
  printk("List count :%d  data == %d/n",count++,pstore[count]->pdata);
  
 }
 for (i = 0 ;i < 5 ;i++ )
 {
  vfree(pstore[i]); 
 }
 //Radix tree
 //初始化基树,GFP = Get Free Page
 INIT_RADIX_TREE(&tree_data,GFP_KERNEL);
 void *pt;
 int ret;
 for (i = 0;i < 5 ;i++ )
 {
  pt = (void *)__get_free_page(GFP_KERNEL);
  if (!pt)
  {
   return -1;
  }
  memcpy(pt,"RADIX TREE",sizeof("RADIX TREE"));
  //插入基树,i值为索引值
  ret = radix_tree_insert(&tree_data,i,pt);
 }
 for (i = 0;i < 5 ;i++ )
 {
  //根据索引值得到指定节点
  pt = radix_tree_lookup(&tree_data,i);
  printk("[Radix tree] data == %s/n",(char *)pt);
  radix_tree_delete(&tree_data,i);
  free_page(pt);
 }
}

static void __exit tree_list_exit(void)
{
}

module_init(tree_list_init);

module_exit(tree_list_exit);

MODULE_LICENSE("GPL");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值