Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9617
  • 博文数量: 5
  • 博客积分: 230
  • 博客等级: 二等列兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-25 14:12
文章分类

全部博文(5)

文章存档

2011年(1)

2010年(3)

2009年(1)

我的朋友
最近访客

分类: LINUX

2010-10-25 21:22:25

这个文件主要是实现字节序转换, 即把一个多字节数据从本机转化为网络字节序。

主要实现了三个函数:
static uint16_t (*hton16) (uint16_t);
static uint32_t (*hton32) (uint32_t);
static uint64_t (*hton64) (uint64_t);

明显就是分别转化16位,32位和64位整型数据了。这是三个函数指针,具体绑定到那个函数,是动态绑定的, 这里的实现手法有点意思,也许可以称为偷梁换柱吧:)

他实现方法是这样:
static inline uint16_t
__byte_order_init16 (uint16_t i)
{
uint32_t num = 1;

if (((char *)(&num))[0] == 1) {
hton16 = ;
hton32 = __swap32;
hton64 = __swap64;
} else {
hton16 = __noswap16;
hton32 = __noswap32;
hton64 = __noswap64;
}

return hton16 (i);
}
static uint16_t (*hton16) (uint16_t) = __byte_order_init16;

只有第一次执行hton16时才进行绑定,直接给转到__swapXX或者_noswapXX上去了,很有意思吧。

阅读(608) | 评论(1) | 转发(0) |
0

上一篇:开始学习glusterfs 代码

下一篇:kref

给主人留下些什么吧!~~

chinaunix网友2010-10-26 18:35:07

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com