比list_entry更简洁的写法list_for_each_entry
2014-07-31 10:37
477 查看
比list_entry更简洁的写法list_for_each_entry 在list.h中,处理每个节点,宏list_entry是个好选择,但是需要用到for循环,而宏list_for_each_entry把for和list_entry结合起来了,使用更加方便。 list_for_each_entry用法 list_for_each_entry(pos,head,member) 其中,pos为定位外面结构的指针,在list_entry中即返回的地址,这里在这个宏中给它赋值。 head为struct list_head结构指针,在list_entry中为第一个参数。 member为在外面结构中的struct list_head结构。在list_entry中为第三个参数。
改写上个遍历进程的程序为:(见上篇)
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/sched.h> static void taskprint(void) { struct task_struct *p; struct list_head *current_head; current_head=¤t->tasks; list_for_each_entry(p,current_head,tasks)//通过它,每个结构指针都放入了p中 { printk("%d\t%s\n",p->pid,p->comm); } } static int taskprintinit(void) { printk("task print is working....\n"); taskprint(); return 0; } static void taskprintexit(void) { printk("task print is leaving...\n"); } module_init(taskprintinit); module_exit(taskprintexit); <span style="font-family:AR PL UMing HK, monospace;"></span><pre name="code" class="cpp">我们这里把list_entry和list_for_each_entry的用法总结一下 struct task_struct { ...... ...... int pid; char *comm; ...... struct list_head tasks; ............ } list_entry: { struct task_struct *ptask; struct list_head *plist; plist=&(current->tasks)->next; for(;plist=¤t->tasks; plist=plist->next) { ptask=list_entry(plist,struct task_struct,tasks); printk(“....”); } list_for_each_entry: { struct task_struct *ptask; struct list_head *current_head; current_head=&(current->tasks); list_for_each_entry(ptask,current_head,tasks) { printk(“....”); } } 这里可以看出来list_for_each_entry的简洁
相关文章推荐
- list_for_each_entry
- list_for_each_entry_continue()与list_for_each_entry_from()的区别
- 关于container_of和list_for_each_entry 及其相关函数的分析
- list_for_each_entry和list_for_each_entry_safe
- 关于container_of和list_for_each_entry 及其相关函数的分析
- linux内核学习笔记之——list_for_each_entry
- linux内核学习list_for_each_entry(转)
- 关于内核中此宏list_for_each_entry的说明
- list_for_each & list_entry & 对内核链表的理解
- linux核list_for_each_entry(pos, head, member)分析
- linux内核——list_for_each_entry
- 终于理解list_entry和list_for_each_entry
- linux内核学习笔记之——list_for_each_entry
- list_for_each_entry
- list_for_each_entry分析
- container_of和list_for_each_entry 及其相关函数的分析
- 详解Linux内核之双向循环链表(2) list_for_each/list_entry/list_for_each_entry
- list_for_each_entry
- list_entry和list_for_each分析
- [转载] 终于理解list_entry和list_for_each_entry