这里是最为简单的链表测试代码,使用如下接口:
初始化(INIT_HEAD)、添加(list_add)、遍历(list_for_each)及取节点list_entry
功能待丰富,目前代码如下:
#include "list.h"
struct stListUse
{
        char *name;
        int index;
        struct list_head list;
};
LIST_HEAD(list_use_head);
struct stListUse *pstListNode;
int main(int argc, char *argv[])
{
        struct stListUse *pstListTmp;
        struct list_head *tmp;
        printf("enter listuse.c/main()\n");
        pstListNode = (struct stListUse *)malloc(sizeof(struct stListUse));
        if(!pstListNode)
        {
                return -1;
        }
        memset(pstListNode, 0, sizeof(struct stListUse));
        INIT_LIST_HEAD(&pstListNode->list);
        /* init node 0 */
        pstListNode->index = 0;
        pstListNode->name = malloc(32*sizeof(char));
        if(!pstListNode->name)
        {
                return -1;
        }
        memset(pstListNode->name, 0, sizeof(32*sizeof(char)));
        strcpy(pstListNode->name, "node0");
        /* add node 0 to list list_use_head */
        list_add(&pstListNode->list, &list_use_head);
        pstListTmp =(struct stListUse *)malloc(sizeof(struct stListUse));
        /* print list */
        printf("*********************************************\n");
        list_for_each(tmp, &list_use_head)
        {
                pstListTmp = list_entry(tmp, struct stListUse, list);
                printf("index:%d, name:%s\n", pstListTmp->index, pstListTmp->name);
        }
        printf("*********************************************\n");
        return 0;
}
root@ubuntu:/mnt/shared/kernelbox/list# ./listuse
enter listuse.c/main()
*********************************************
index:0, name:node0
*********************************************
root@ubuntu:/mnt/shared/kernelbox/list# 
linux 链表之:初始化(INIT_HEAD)、添加(list_add)、遍历(list_for_each)及取节点list_entry
原文地址:http://blog.csdn.net/xiangpingli/article/details/40756727