ortp中的queue_t,msgb(mblk_t)和datab(也适用于solaris驱动所使用的数据结构)
来源:互联网 发布:java io流总结 编辑:程序博客网 时间:2024/06/04 20:11
在ortp中实现了一个通用的队列,每一个队列包括三个实体,分别是队列、消息块和数据块,这三个实体分别对应queue_t、msgb和datab结构体。
queue_t的定义如下所示:
typedef struct _queue {mblk_t _q_stopper; /* 消息队列头 */int q_mcount; /*number of packet in the q */} queue_t;
_q_stopper:消息块,内嵌于queue_t,它的主要作用是作为作为链表的表头;_q_stopper所指向的mblk_t并无实际数据,只是作为消息对列头的标识头。putq或者getq都是从_q_stopper之后的第一个mblk_t开始。
q_mcount:用于记录队列元素的个数。
构造一个空的消息队列:
注:void qinit(queue_t *q){
mblk_init(&q->_q_stopper);
q->_q_stopper.b_next=&q->_q_stopper;
q->_q_stopper.b_prev=&q->_q_stopper;
q->q_mcount=0;
}
从上面这个初始化一个queue_t的函数可以得知,_q_stopper初始化的时候,_q_stopper.b_next、_q_stopper.b_prev都是指向_q_stopper自己的。
注:void qinit(queue_t *q){
mblk_init(&q->_q_stopper);
q->_q_stopper.b_next=&q->_q_stopper;
q->_q_stopper.b_prev=&q->_q_stopper;
q->q_mcount=0;
}
从上面这个初始化一个queue_t的函数可以得知,_q_stopper初始化的时候,_q_stopper.b_next、_q_stopper.b_prev都是指向_q_stopper自己的。
mblk_t的定义如下所示:
typedef struct msgb {struct msgb *b_prev; /* 指向上一个消息块 */struct msgb *b_next; /* 指向下一个消息块 */struct msgb *b_cont; /* 复合消息快 mblk_t */struct datab *b_datap; /* 数据块指针 */unsigned char *b_rptr; /* 读取的数据指针 */unsigned char *b_wptr; /* 写入的数据指针 */uint32_t reserved1;uint32_t reserved2;} mblk_t;
b_prev和b_next:消息块的链表指针,所有消息块通过这两个指针串接成链。
b_cout:通过这个指针可以构成复合消息块,复合消息块由多个消息块组成,但在队列中作为一个元素
b_datap:消息块的数据指针,指向一个数据块
b_rptr:指向数据块的数据已经读取的部分
b_wptr:指向数据块的数据已经写入的部分
reserved1和reserved2:保留用途
datab的定义如下所示:
typedef struct datab {unsigned char *db_base; /* 数据块的数据基址 */unsigned char *db_lim; /* 数据块的数据部分的结束地址 */void (*db_freefn) (void *); /* 数据块数据的释放函数 */int db_ref; /* 数据块引用计数 */} dblk_t;
db_base:数据基址
db_lim:数据的结束地址
db_freefn:用于释放数据块的数据的函数
db_ref:数据块的引用计数
0 0
- ortp中的queue_t,msgb(mblk_t)和datab(也适用于solaris驱动所使用的数据结构)
- ORTP库的使用
- Ortp的使用(待续)
- 从程序员到CTO所要培养的六种能力,我想也适用于CIO吧!
- 适用于Solaris系统的HA----FSTha安装
- oRTP使用
- ORTP 使用
- linux的i2c驱动中的函数和数据结构的分析
- 使用eXsip和ORTP通话(一)
- JS:去掉Java代码中的注释(也适用于JS和C#)
- solaris 中的grep 使用
- 驱动编程中的数据结构和编程方法
- 使用SQL2000的翻页写法,也适用于其他数据库,例如ORACLE
- 直接创建OLE对象,未注册的ocx也可以使用(适用于com接口)
- ortp使用详解 ortp-release.pdf
- ortp使用详解 ortp-release.pdf
- Solaris中的Milestone和runlevel
- ortp库使用入门
- MyBatis Generator代码生成工具及参考文档链接
- Android Volley组件的优化
- Android Volley组件的优化
- 深入了解Struts2返回JSON数据的原理及具体应用范例
- 微信分享操作JSSDK
- ortp中的queue_t,msgb(mblk_t)和datab(也适用于solaris驱动所使用的数据结构)
- Warning: Could not find an exact (case-sensitive) match for 'Title'.
- Codeforces 665E Beautiful Subarrays【01trie树】
- train_cascade 源码阅读之LBP特征
- Navicat 导出向导之设置目标文件名
- js关于字符串空格的处理
- android中的Selector的用法---主要是改变ListView和Button控件的默认背景
- DrawCall优化
- steered BRIEF