linux list

linux list

1. container_of

#define container_of(ptr, type, member)                 /
({                                                        /
    const typeof( ((type *)0)->member ) *__mptr = (ptr);/
    (type *)( (char *)__mptr - offsetof(type,member) ); /
})

通过成员指针得到容器指针。

2. struct list_head

struct list_head {
    struct list_head *next, *prev;
};

3. list_entry

#define list_entry(ptr, type, member) /
    container_of(ptr, type, member)

4. list_for_each

#define list_for_each(pos, head)   
    for (pos = (head)->next, prefetch(pos->next); pos != (head);   
        pos = pos->next, prefetch(pos->next)) 

5. list_for_each_entry

    #define list_for_each_entry(pos, head, member)    /
         for (pos = list_entry((head)->next, typeof(*pos), member); /
               prefetch(pos->member.next), &pos->member != (head);  /
               pos = list_entry(pos->member.next, typeof(*pos), member))
原文地址:https://www.cnblogs.com/gr-nick/p/10805616.html