当前位置: 技术问答>linux和unix
关于《unix网络编程》中路由套接口那一章的一个问题
来源: 互联网 发布时间:2016-06-07
本文导语: 在看第十八章 路由套接口中 在图18.9那段程序中有一个关于移动指针的宏看不懂。中文版P424 #define ROUNDUP(a,size) (((a)&((size)-1))?(1+((a)|((size)-1))):(a)) #define NEXT_SA(ap) ap=(SA*) ((caddr_t)ap+(ap->sa_len?ROUNDUP(ap->sa_len,sizeof(u_long)):...
在看第十八章 路由套接口中
在图18.9那段程序中有一个关于移动指针的宏看不懂。中文版P424
就是rt_msghdr结构体后跟了很多套接口结构,由于这些套接口结构都是变长的,所以需要用这些宏,来从这些结构体移到下一个结构体
在图18.9那段程序中有一个关于移动指针的宏看不懂。中文版P424
#define ROUNDUP(a,size) (((a)&((size)-1))?(1+((a)|((size)-1))):(a))
#define NEXT_SA(ap) ap=(SA*)
((caddr_t)ap+(ap->sa_len?ROUNDUP(ap->sa_len,sizeof(u_long)):sizeof(u_long)))\这个宏还好理解,就是那个ROUNDUP,实在是看不懂
就是rt_msghdr结构体后跟了很多套接口结构,由于这些套接口结构都是变长的,所以需要用这些宏,来从这些结构体移到下一个结构体
|
假定 a 为 char *, size 为 int,貌似等价于:
一般 size 为 2 的 n 次方,roundup 用于将 a 向上取整到 size 的整数倍
int roundup(char *a, int size)
{
if (a & (size - 1)) {
a |= (size - 1);
a += 1;
}
return a;
}
一般 size 为 2 的 n 次方,roundup 用于将 a 向上取整到 size 的整数倍