栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Linux中的list_entry

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux中的list_entry

考虑如下两个结构:

struct data {    int something;};struct container {    int something_before;    struct data data_item;    int something_after;};

假设您有一个指向

struct data
值的指针:

struct data *data_ptr;

list_entry()
宏可以帮助你转换
data_ptr
到一个指针
struct container
保存的值
structdata
值,指向
ptr

struct container *cont_ptr = list_entry(data_ptr, struct container, data_item);

宏作品通过计算的偏移量

data_item
内的
struct container
,并从中减去很多字节
data_ptr
指针。当将
structcontainer *
其强制转换为时,会给出指向
struct container
持有此特定
struct data
“内部”的的有效指针。

也可以使用内置

offsetof()
宏来简化该宏:

#define list_entry(ptr, type, member)     ((type *)((char *)(ptr) – offsetof(type, member)))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号