Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122589
  • 博文数量: 20
  • 博客积分: 1627
  • 博客等级: 上尉
  • 技术积分: 383
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 16:11
文章分类

全部博文(20)

文章存档

2012年(5)

2011年(2)

2010年(12)

2009年(1)

我的朋友

分类: C/C++

2010-04-11 17:42:12

list.h

这个list.h是内核中的list.h扒出来的。同事给我的,呵呵。和我原先说的uthash一样,包含进来就可以用。
下面是个使用的例子

hlist.c

#include "list.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

struct list_head ulist;

struct task {
        struct list_head list;
        int id;
        char name[10];
};

int main()
{
        int i;
        struct task *task_item;
        struct list_head *ptr, *ptr_del;;

       
INIT_LIST_HEAD(&ulist); /* 不能用LIST_HEAD(ulist); */

        for (i=0; i<10; i++)
        {
                task_item = (struct task *)malloc(sizeof(struct task));
                task_item->id=i;
                sprintf (task_item->name, "# %-2d #", i);
                list_add(&task_item->list, &ulist);
                printf ("add item=%p,id=%d,name=%s \n", &task_item->list, task_item->id, task_item->name);
        }

        for (ptr=ulist.prev; ptr != &ulist;)
        {
                task_item = list_entry(ptr, struct task, list);
                printf ("foreach item=%p,id=%d,name=%s \n", ptr, task_item->id, task_item->name);

                ptr_del=ptr;
                ptr=ptr->prev;

                list_del(ptr_del);
                printf ("del item=%p,id=%d,name=%s \n", ptr_del, task_item->id, task_item->name);
                free(task_item);

        }

        /*在这里不要用for_each_entry那个宏,会出警告,具体警告忘记了。都是因为prefetch(pos->member.prev)宏的问题,查了下,好像是说告诉cpu预先取出这个数,是优化用的,在用户空间没有必要吧*/
        for (ptr=ulist.prev; ptr != &ulist; ptr=ptr->prev)
        {
                task_item = list_entry(ptr, struct task, list);
                printf ("foreach item=%p,id=%d,name=%s \n", &task_item->list, task_item->id, task_item->name);
        }
        return 0;
}


makefile

CC=gcc
CFLAGS=-Wall -g

all: depend hlist

depend:
        $(CC) -MM *.c > .depend

hlist: hlist.o
        $(CC) -o $@ $<

ctags:
        ctags *.h *.c
clean:
        rm -f *.o hlist


阅读(874) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~