内核链表使用举例

原创 2016年09月01日 14:56:07
内核链表使用举例
#ifndef _EVENT_LIST_H_
#define _EVENT_LIST_H_

#include "list.h" // 内核链表头文件

typedef int (*event_cb)(void *data);

typedef struct
{
  void *params;
  event_cb handle;
  struct list_head list;
} event_elem_t;

int EventListAdd(event_elem_t *event, struct list_head *event_head);
int EventListDel(event_elem_t *event, struct list_head *event_head);
void EventListProcess(struct list_head *event_head, void *ret);

#endif /* _EVENT_LIST_H_ */
#include "event_list_.h"
#include <stddef.h>

struct list_head proto_event_list;

LIST_HEAD(proto_event_list);

int EventListAdd(event_elem_t *event, struct list_head *event_head)
{
  if(event == NULL || event->handle == NULL)
  {
    return -2;
  }

  list_add(&event->list, event_head);

  return 0;

}

int EventListDel(event_elem_t *event, struct list_head *event_head)
{
  event_elem_t *pevent;
  struct list_head *pos;

  if(event == NULL || event->handle == NULL)
  {
    return -2;
  }

  list_for_each(pos, event_head)
  {
    const struct list_head *__mptr = pos;
    pevent = (event_elem_t *)((char *)__mptr - offsetof(event_elem_t, list) );

    if(pevent == event_elem_t)
    {
      list_del(pos);
	  
      return 0;
    }
  }

  return -3;//ERR;

}

void EventListProcess(struct list_head *event_head, void *ret)
{
  event_elem_t *pevent;
  struct list_head *pos;
  const struct list_head *__mptr;

  if(list_empty(event_head))
  {
    return;
  }

  list_for_each(pos, event_head)
  {
    __mptr = pos;
    pevent = (event_elem_t *)((char *)__mptr - offsetof(event_elem_t, list) );
    *(int *)ret = pevent->event_handle(pevent->params);
  }
}

版权声明:原创不易,转载请注明出处:http://blog.csdn.net/wqx521

相关文章推荐

Linux 内核链表使用举例

链表数据结构的定义很简洁: struct list_head { struct list_head *next, *prev; }; list_head结构包含两个指向list_head结...

单链表的详细讲解及举例

  • 2013年01月08日 20:58
  • 7KB
  • 下载

数据结构例程——单链表应用举例

本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)#include #include #...

linux内核链表提取与使用

  • 2015年12月21日 11:55
  • 8KB
  • 下载

单向链表的应用举例

1.单向链表的倒置 思路:取原链表的每一个结点,将其作为第一个结点插入到新链表中。 template void LinkedList :: Inverse () { ListNode *p, ...
  • algzjh
  • algzjh
  • 2016年10月22日 17:47
  • 172

单链表应用举例

题目: 例3.3 利用单链表的基本运算,实现如果在单链表A中出现的元素,在单链表B中也出现,则将单链表A中的该元素删除。 代码: /*包含头文件*/ #include #include #...
  • e891377
  • e891377
  • 2016年08月07日 00:46
  • 141

单链表的应用举例

要求:设计一个成员函数,要求在单链表中插入一个数据元素x,并要求插入后单链表中的数据元素从小到大有序排列。 思路:很简单,就是拿x从链表第一个元素一个个比较下去,找到合适的位置插入。 注意:我们是...

链表应用举例

例一:求表长 设一个移动工作指针p和一个计数器j,初始时p=L->next,J=0,若p非空,则计数器加1,并将指针下移一个位置,直到达链表尾,算法描述如下:int LinkListLen(Link...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内核链表使用举例
举报原因:
原因补充:

(最多只允许输入30个字)