读书人

关于linux代码中的一个构造体确认

发布时间: 2013-08-20 17:47:51 作者: rapoo

关于linux代码中的一个结构体确认
static inline struct nlattr *nla_next(const struct nlattr *nla, int *remaining)
{
int totlen = NLA_ALIGN(nla->nla_len);

*remaining -= totlen;
return (struct nlattr *) ((char *) nla + totlen);
}

#define NLA_ALIGN(len)(((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))

其中nlattr结构如下:
struct nlattr
{
__u16 nla_len;
__u16 nla_type;
};
疑问:
一 不太明白nlattr的意义是什么,nla_len指的是整个nlattr的长度吗?
二 这个宏定义NLA_ALIGN(len)代表什么意思,从代码中看应该是指一个nlattr的长度,但是这个定义没看懂什么意思

请各位帮忙看看这个疑问,多谢!
[解决办法]


struct nlattr
{
__u16 nla_len;
__u16 nla_type;
};
1 就是一个结构体而已!一个长度,一个是type

#define NLA_ALIGN(len) (((len) + NLA_ALIGNTO - 1) & ~(NLA_ALIGNTO - 1))
2 一个宏函数而已!len为参数,

[解决办法]
nla_len有效数据长度。
NLA_ALIGN(nla->nla_len),按字节对齐后,结构体实际占用内存大小

读书人网 >C语言

热点推荐