博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux共享库 Linux内核链表
阅读量:5843 次
发布时间:2019-06-18

本文共 2077 字,大约阅读时间需要 6 分钟。

#ifndef __LINKEDLIST_H_#define __LINKEDLIST_H_#include 
#define offsetof(type, member) ((size_t)&((type *)0)->member)#define container_of(ptr, type, member) ({\const typeof(((type *)0)->member) *__mptr = (ptr);\(type *)((char *)__mptr - offsetof(type,member));})// "const typeof(((type *)0)->member) *__mptr = (ptr);"//开发者使用时输入的参数有问题:ptr与member类型不匹配,编译时便会有warnningtypedef struct tagStListNode{ struct tagStListNode *pstNext;}StListNode;typedef struct tagStListHead{ StListNode *pstFirstNode;}StListHead;#define LIST_ENTRY(ptr, type, member) \container_of(ptr, type, member)#ifdef __cplusplusextern "C"{#endif StListNode * List_First(StListHead *pstHead); void List_PushBack(StListHead *pstHead, StListNode *pstNode); StListNode * List_PopFront(StListHead *pstHead); #define FOREACH(pstHead, pstEntry, member) \for(pstEntry = LIST_ENTRY(List_First(pstHead), typeof(*pstEntry), member); \pstEntry != NULL; \pstEntry = (pstEntry->member.pstNext)? LIST_ENTRY(pstEntry->member.pstNext, typeof(*pstEntry), member) : NULL)#ifdef __cplusplus}#endif#endif
#include "linkedlist.h"StListNode * List_First(StListHead *pstHead){    StListNode *pstCurNode = NULL;    if (NULL == pstHead)    {        return NULL;    }    pstCurNode = pstHead->pstFirstNode;    return pstCurNode;}void List_PushBack(StListHead *pstHead, StListNode *pstNode){    StListNode *pstCurNode = NULL;    if (NULL == pstHead || NULL == pstNode)    {        return;    }    pstCurNode = pstHead->pstFirstNode;    if (NULL == pstCurNode)    {        pstHead->pstFirstNode = pstNode;        return;    }    while (pstCurNode->pstNext)    {        pstCurNode = pstCurNode->pstNext;    }    pstCurNode->pstNext = pstNode;}StListNode * List_PopFront(StListHead *pstHead){    StListNode *pstCurNode = NULL;    StListNode *pstNextNode = NULL;    if (NULL == pstHead)    {        return NULL;    }    pstCurNode = pstHead->pstFirstNode;    if (NULL == pstCurNode)    {        return NULL;    }    pstNextNode = pstCurNode->pstNext;    pstHead->pstFirstNode = pstNextNode;    return pstCurNode;}

 

转载地址:http://qkqcx.baihongyu.com/

你可能感兴趣的文章
OK335xS GPMC nand device register hacking
查看>>
html5-盒子模型
查看>>
iOS - OC Copy 拷贝
查看>>
FlashCache初体验
查看>>
jstl 处理Date 时间
查看>>
SQL根据细粒度为天的查询
查看>>
【汇编语言】DEBUG的使用
查看>>
ggplot画基本图形类型
查看>>
Nginx服务状态的监控
查看>>
pycharm工具下代码下面显示波浪线的去处方法
查看>>
C#高级编程9 第17章 使用VS2013-C#特性
查看>>
java集合类
查看>>
对软件工程这门课的收获与总结
查看>>
转:shell awk
查看>>
磁盘与目录的容量(转)
查看>>
【转】OpenGL超级宝典笔记——纹理映射Mipmap
查看>>
【SpringBoot】在IOC之外的类中使用IOC内部的Bean
查看>>
android--Activity有返回值的跳转
查看>>
Fiddle:使用断点:bpu,bpafter
查看>>
一个js的动画,以前以为只有flash可以实现
查看>>