《TCP/IP详解 卷2:实现》 —2.7 mbuf宏和函数的小结

举报
华章计算机 发表于 2019/11/20 16:45:41 2019/11/20
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第2章,第2.7节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。

2.7   mbuf宏和函数的小结

在操作mbuf的代码中,我们会遇到图2-19中所列的宏和图2-20中所列的函数。图2-19中的宏以函数原型的形式显示,而不是以#define形式来显示参数的类型。由于这些宏和函数主要用于处理mbuf数据结构并且不涉及联网问题,因此我们不查看实现它们的源代码。还有另外一些mbuf宏和函数用于Net/3源代码的其他地方,但由于我们在本书中不会遇到它们,因此没有把它们列于图中。

image.png

图2-19   我们在本书中会遇到的mbuf宏

       image.png

图2-20   我们在本书中会遇到的mbuf函数

在所有原型中,参数nowait都是M_WAIT或M_DONTWAIT,参数type是图2-10中所示的MT_xxx中的一个。

调用宏M_PREPEND的例子如:从图1-7转换到图1-8的过程中,当IP和UDP首部被添加到数据的前面时要调用这个宏,因为另一个mbuf要被分配。但当这个宏再次被调用(从图1-8转换成图2-2)来添加以太网首部时,在那个mbuf中已有存放这个首部的空间。

m_copydata的最后一个参数的类型是caddr_t,它代表“内核地址”。这个数据类型通常定义在<sys/types.h>中,为char *。它最初在内核中使用,但被某些系统调用使用时被外露出来。例如mmap系统调用,不论是4.4BSD或SVR4都把caddr_t作为第一个参数的类型并作为返回值类型。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。