青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

為生存而奔跑

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

留言簿(5)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 331736
  • 排名 - 74

最新評論

閱讀排行榜

評論排行榜

list_entry的宏定義:
#define list_entry(ptr, type, member) \ 
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
這個倒是不難理解:從一個結構的成員指針找到其容器的指針。
但是正因為如此,我的第一感覺是,這個宏的名字應該更加抽象,名字似乎應該改稱叫“尋找容器”一類的,查看list.h源代碼,發現現在的定義是這樣的:
#define list_entry(ptr, type, member) \
    container_of(ptr, type, member)

#define container_of(ptr, type, member)                 \
({                                                        \
    const typeof( ((type *)0)->member ) *__mptr = (ptr);\
    (type *)( (char *)__mptr - offsetof(type,member) ); \
})

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
linux不想用C++,但又想利用C++的優點,如是出現了很多奇怪的宏,他們叫做trick。
ptr是找容器的那個變量的指針,把它減去自己在容器中的偏移量的值就應該 得到容器的指針。(容器就是包含自己的那個結構)。指針的加減要注意類型,用(char*)ptr是為了計算字節偏移。((type *)0)->member是一個小技巧。自己理解吧。前面的(type *)再轉回容器的類型。
=====================
#define list_entry(ptr, type, member) \
        ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

    ptr是指向list_head類型鏈表的指針,type為一個結構,而member為結構type中的一個域,類型為list_head,這個宏返回指向type結構的指針。在內核代碼中大量引用了這個宏,因此,搞清楚這個宏的含義和用法非常重要。

  
設有如下結構體定義:
typedef struct xxx
{
     ……(結構體中其他域,令其總大小為size1)
     type1 member;
     ……(結構體中其他域)
}type;


定義變量:
   type a;
   type * b;
   type1 * ptr;
執行:
   ptr=&(a.member);
   b=list_entry(ptr,type,member);
則可使b指向a,得到了a的地址。

如何做到的呢?

先看&((type *)0)->member:
把“0”強制轉化為指針類型,則該指針一定指向“0”(數據段基址)。因為指針是“type *”型的,所以可取到以“0”為基地址的一個type型變量member域的地址。那么這個地址也就等于member域到結構體基地址的偏移字節數。

 


再來看 ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))):
(char *)(ptr)使得指針的加減操作步長為一字節,(unsigned long)(&((type *)0)->member)等于ptr指向的member到該member所在結構體基地址的偏移字節數。二者一減便得出該結構體的地址。轉換為 (type *)型的指針,大功告成。

==============

 list_entry定義如下:

/**
* list_entry - get the struct for this entry
* @ptr:        the &struct list_head pointer.
* @type:        the type of the struct this is embedded in.
* @member:        the name of the list_struct within the struct.
*/
#define list_entry(ptr, type, member) \
        ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
===================
posted on 2011-01-27 16:45 baby-fly 閱讀(1178) 評論(0)  編輯 收藏 引用 所屬分類: Ubuntu&Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产亚洲一区二区三区在线观看| 好看的日韩视频| 久久精品国产亚洲高清剧情介绍| 国产精品毛片高清在线完整版 | 久久综合九色综合久99| 久久精品99| 99国产精品| 国产亚洲精品v| 精品999在线观看| 亚洲国产导航| 国产日韩精品在线观看| 国语精品一区| 国产精品伦一区| 麻豆成人精品| 欧美国产精品人人做人人爱| 欧美日韩在线一二三| 国产一区二区三区观看| 亚洲国产精品传媒在线观看| 一区二区三区久久网| 亚洲日本久久| 亚洲在线免费视频| 老司机午夜精品视频| 亚洲免费观看高清完整版在线观看熊| 欧美jizz19性欧美| 亚洲福利久久| 99精品国产在热久久下载| 亚洲理论在线观看| 亚洲精品免费在线| 先锋影音网一区二区| 欧美91福利在线观看| 国产日产欧美精品| 99视频精品| 噜噜噜91成人网| 亚洲综合欧美| 欧美日韩另类一区| 最新国产精品拍自在线播放| 狠狠色噜噜狠狠色综合久| 亚洲精品久久在线| 久久亚洲不卡| 亚洲欧美日韩国产| 欧美日韩影院| 亚洲精品女人| 美日韩精品视频| 免费亚洲视频| 亚洲影音一区| 欧美视频在线观看 亚洲欧| 亚洲高清久久| 久久久久免费视频| 性欧美18~19sex高清播放| 国产精品爱久久久久久久| 国产精品推荐精品| 日韩一区二区免费看| 亚洲高清二区| 另类图片国产| 亚洲国产老妈| 在线一区欧美| 亚洲自拍16p| 亚洲日本中文字幕免费在线不卡| 99re视频这里只有精品| 毛片一区二区| 国产精品黄色在线观看| 99国产精品99久久久久久粉嫩| 亚洲一区免费网站| 亚洲欧美国产另类| 在线亚洲精品| 久久精品理论片| 国产日韩欧美三级| 久久成人18免费观看| 狂野欧美激情性xxxx欧美| 亚洲欧美日韩精品久久亚洲区| 久久久久国产精品一区三寸| 国产婷婷一区二区| 亚洲大片免费看| 一本不卡影院| 久久www成人_看片免费不卡| 亚洲制服av| 国产一区日韩欧美| 在线视频你懂得一区| 日韩午夜剧场| 国产精品一区二区三区乱码 | 亚洲无限av看| 久久精品一区二区| 欧美激情1区2区3区| 久久在精品线影院精品国产| 亚洲国产欧美一区二区三区丁香婷| 亚洲视屏一区| 一区二区精品国产| 国产丝袜一区二区| 亚洲国产精品传媒在线观看| 午夜精品一区二区三区电影天堂| 久久最新视频| a91a精品视频在线观看| 亚洲欧美激情在线视频| 亚洲第一网站| 亚洲婷婷综合色高清在线| 黄色亚洲大片免费在线观看| 91久久精品美女| 国产亚洲精品久久久久动| 亚洲午夜羞羞片| 欧美一区二区日韩| 一本久久综合亚洲鲁鲁五月天| 免费成人av在线| 欧美日本中文字幕| 久久综合国产精品| 久久精品论坛| 亚洲一区激情| 男女激情久久| 欧美在线日韩| 欧美日韩一区二区免费在线观看| 亚洲精品在线一区二区| 亚洲午夜性刺激影院| 91久久国产精品91久久性色| 午夜精品久久一牛影视| 日韩视频在线你懂得| 久久久夜夜夜| 久久99在线观看| 欧美午夜一区二区福利视频| 欧美激情精品久久久| 国产揄拍国内精品对白| 亚洲视频一区二区在线观看| 亚洲精品视频一区二区三区| 亚洲国产日韩欧美综合久久| 国产亚洲电影| 亚洲小视频在线观看| 国产精品国产三级国产普通话三级| 日韩一级片网址| 久久久久久9| 亚洲美女视频在线观看| 久久精品成人| 久久精品视频免费观看| 国产精品呻吟| 亚洲女女做受ⅹxx高潮| 亚洲欧美国产视频| 欧美三级视频| 国产精品99久久久久久白浆小说| 国产精品自拍在线| 久久久噜噜噜久久狠狠50岁| 国产精品永久在线| 亚洲免费人成在线视频观看| 亚洲综合丁香| 国产精品一区二区久久国产| 久久一区激情| 亚洲毛片播放| 亚洲一区二区三区久久| 久久中文在线| 久久午夜精品| 亚洲美女av黄| 久久人人97超碰国产公开结果| 亚洲欧洲一区二区天堂久久| 欧美日韩视频在线一区二区| 欧美 日韩 国产 一区| 久久久久国产一区二区三区四区| 亚洲国产精品v| 久久亚洲高清| 亚洲国产成人精品久久| 国产精品美女久久久久久2018| 久久精品中文字幕免费mv| 美女视频网站黄色亚洲| 国产精品99久久不卡二区| 亚洲欧美中文字幕| 久久精品夜色噜噜亚洲a∨| 精品动漫3d一区二区三区免费版 | 国产亚洲精品美女| 欧美一区二区三区视频在线观看| 日韩小视频在线观看| 欧美日韩免费网站| 午夜一区不卡| 午夜精品久久久久久久99樱桃 | 欧美在线一区二区三区| 国产一区二区三区在线播放免费观看| 亚洲欧洲一区| 亚洲一区精彩视频| 韩日精品视频| 欧美理论在线| 午夜久久tv| 亚洲国产精品久久| 在线观看欧美日韩| 欧美日韩国产小视频在线观看| 欧美va天堂在线| 亚洲一区二区三区精品在线| 国产综合网站| 亚洲欧美视频一区二区三区| 麻豆精品在线观看| 国产亚洲欧美一区二区| 免费观看在线综合| 亚洲欧美一区二区原创| 亚洲男同1069视频| 在线播放中文一区| 久久国产精品黑丝| 日韩视频欧美视频| 久久另类ts人妖一区二区| 一区二区三区日韩| 欧美日韩国产区一| 久久综合99re88久久爱| 亚洲欧美日韩在线综合| 一区二区三区视频在线| 亚洲国产高潮在线观看| 日韩亚洲欧美成人一区| 一区二区三区我不卡| 国产区在线观看成人精品|