Linux Driver(5) - container_of 分析定義如下:#define container_of(ptr, type, member) ({ \const typeof( ((type *)0)->member ) *__mptr = (ptr); \(type *)( (char *)__mptr - offsetof(type,member) );})一個看起來很複雜的巨集,這裡面有用到 offsetof,它是定義在stddef.h裡面,裡面的定義如下:/* Offset of member MEMBER in a struct of type TYPE. */#define offsetof(TYPE, MEMBER) 襯衫__builtin_offsetof (TYPE, MEMBER)但不知__builtin_offsetof定義在那,上網找了一下,offset是定義如下:#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)主要就是為了取這個 member 在這個 struct 的偏移量。我們宣告一個 stuct 如下,並套用這個巨集,可得到 offset = 36 的結果。typedef struct _account_info{ int num; char 酒店兼職addr[32]; char name[32]; int serial;}account_info;size_t offset = offsetof(account_info, name);上一句在這例子中,如果不使用巨集的話,相等於以下三句:size_t offset = 0;account_info* infop = 0;offset = (size_t)(&infop->name);這樣應該就很清楚了,主要是後面二句,先宣告一個account_info的指標 infop,並指向0的位置。為何要這樣呢? 就是為了下面那一行,剛好信用貸款可以用它來得到 name在account_info的相對位置。而以零當起始,算出來的才會是正確的偏移量。例如 account_info* infop = 10,那這裡 offset 就會變成不正確的 46。接下來就是 container_of 的分析了~~假設一下它的應用:void print_account_info(char* namep){ account_info* infop = container_of(namep, account_info, name); printf("num=%d, addr=%s 房屋買賣name=%s\n", infop->num, infop->addr, infop->name, infop->serial);}int main(void){ account_info info; info.num = 1; strcpy(info.addr, "Taipei"); strcpy(info.name, "hughes"); info.serial = 2; print_account_info(info.name);}節能燈具由這例子可看出它的應用,就是由結構的成員指標得到結構指標~~接下來我們來模擬它的做法: account_info* infop; const typeof(infop->serial)* __mptr = &info.serial; infop = (__mptr - offsetof(account_info, serial)); printf("1. infop=%x, __mptr=%x, num=%d, addr=%s name=%s, serial=%d\n" , infop, 租辦公室__mptr, infop->num, infop->addr, infop->name, infop->serial); infop = ((char*)__mptr - offsetof(account_info, serial)); printf("2. infop=%x, __mptr=%x, num=%d, addr=%s name=%s, serial=%d\n" , infop, __mptr, infop->num, infop->addr, infop->name, infop->serial);一開始先宣告房屋貸款一個 const 的暫存指標,存這個struct的member的指標,在這個例子中就是 serial。typeof 是取出其型態的保留字,上面第二句等同這句 const int* __mptr = &info.serial。不過我並不了解這句的用意?如果有人知道可以告訴我,謝謝!!目前的想法有兩個,一是在核心中可能在某些情況下這指標會被改變,所以才要另存一個新的指標,而且要是const的,代表它不可被改變。二是是這防止巨集不小心改動到原來的指標內容,因為畢裝潢竟是在kernel中,這樣是可能會讓系統crash的,使用 const可讓編譯器早一步提醒我們。似乎後者的可能較大點。接下來的 infop = (__mptr - offsetof(account_info, serial)) 才是重點,就是把這指標的位置往前移,移動多少呢?就是用前面提到的巨集 offsetof 來取出它在 struct 之中的偏移量,這樣就可把指標指向struct。原理其實就是簡單的數學,一元一次方程式啦~~~設 struct 指標為 sp,member 指標為 mp,mp 在 sp中的酒店經紀偏移量為 x。那麼 mp = sp + x ,mp 和 x 已知的情況下,當然可以求出 sp = mp - x。最後在上面的例子中可看出為何 infop 要轉型成 char*,因為不同類型的指標偏移量不同,在上面的例子中,如果像第一個不轉型的話,其 printf 印出來的值就會錯誤。算出來的偏移量,是要位移 1 才對,所以要轉型成char*。當然如果上面的例子是用 info.name 的話,就沒有差了。
目前分類:未分類文章 (107)
- Sep 19 Wed 2012 09:25
Linux Driver(5) - container_of 分析
- Sep 18 Tue 2012 12:28
選購芒果建議
- Sep 17 Mon 2012 14:32
我很好
- Sep 16 Sun 2012 17:03
CRI-J Season2 Vol.2 將于10日在日本發售
- Sep 15 Sat 2012 19:24
消除M型社會貧富差距 經濟發展與環保並重 (台灣時報 社論 2008.1.1)
消除M型社會貧富差距 經濟發展與環保並重 (台灣時報 社論 2008.1.1)消除M型社會貧富差距 經濟發展與環保並重「迎接二○○八新挑戰」系列之二 告別了紛擾不安的二○○七年,迎來了令人期待的二○○八年。在這個歲末年初之際,正是我們檢討過去、策勵未來的時候。 依照我國官方估計,去年經濟成長率達到百分之五點四六,顯著高於目標值四點六永慶房屋,也高於前年的四點九;消費者物價指數上漲了百分之一點六五,低於目標上限值百分之二。然而,失業率仍高達百分之三點九,高於目標值三點八;每人國民生產毛額一六七六八美元,低於目標值一六八八六美元,主因是匯率低於預期值;但若以新台幣計算,則以五五萬三四三元超越了目標值五三萬五六二二元。若以專家最重視的「經濟成長率」來看,在售屋網油價高漲和美國次級房貸風暴的壓力下,這樣的經濟表現算是一項「驚喜」,交出了一張不錯的成績單! 然而,在還算不差的成績下,台灣經濟還是隱藏了不少問題。首先,是經濟成長的動力,來自國外淨需求貢獻了百分之三點○三,來自國內淨需求的貢獻只有百分之二點四三;其中國內需求的貢獻為一點六五,國內投資的貢獻僅為零點七六,但比起前年兩酒店經紀者都有些微成長。易言之,近年來國內需求不振,經濟成長主要靠外銷出口的現象還在持續之中。以內需為主的產業,迄今仍顯得嬴弱不堪、欲振乏力;使得國內所得分配繼續呈現兩極化的現象,「M型社會」的趨勢益發明顯。雖然官方宣稱以家庭所得五等分的比例來看似有改善跡象,但少有民眾認同這項估計,成為政府施政的一大挑戰! 比較難能可貴的是室內設計,一年來遭逢油價飆漲、原物料價格高昇、颱風摧殘等種種不利因素的衝擊下,全年的消費者物價居然只上漲了百分之一點六五,除了僅高於景氣低迷的日本以外,並未高於其他主要的貿易對手國。不過,躉售物價上漲了百分之六點二七,顯示通貨膨脹的壓力是存在的,只不過暫被批發和零售商自行吸收,無能轉嫁給消費者罷了;這其實也顯示了民間消費能膠原蛋白力的確不佳。往後若景氣好轉,物價持續上漲的壓力就會顯現,不可不慎! 去年最顯著的負面發展,是在石油價格飆漲之下,「油價浮動機制」首次上路,竟然發生台灣中油公司「漲得越多、賺得越多」的不合理狀況,激發民間廣泛不平,導致油價浮動機制才上路就被擱置的窘境。這事件顯示,政府應對油價上漲的經驗不足,末稍神經未能即時對民意做出反票貼應,導致騎虎難下。類似情況發生在秋末民生物資飆升之際,政府官員卻老是在狀況外,頻頻突兀發言,乃致民怨四起。最後總算在行政院組成「穩定物價工作小組」,祭出穩定物價六項措施之後,才逐漸緩和民怨! 但是,就在過完聖誕假期之際,兩個月前才飆漲到一公斤上百元的菜價,卻又急跌到四元以下;讓中南部菜農叫苦連天,甚至將辛苦栽培的青菜太平洋房屋就地耘田當成肥料。政府緊急啟動「九五機制」,以農民成本九五折價格加以收購,但似乎為時已晚。這種「菜金菜土」的「年度大戲」迄今未能解決,儼然成為政府施政能力的重大挑戰,僅以提高購價格因應,似乎也未能消除農怨。 著名的「全球透視」機構預測,二○○八年全球經濟成長,在次級房貸風暴的陰影下放緩,降到百分之三點四;但東亞仍維持西裝在八點二,中國以十點七領先群雄,印度也以八點六緊追不捨。油價將維持每桶八十美元高檔,超越今年均價七十一美元。因此,國內要達成百分之四點八的經濟成長率和一八○○○美元的每人生產毛額將是嚴峻的挑戰。至於物價上漲維持在百分之二的目標值下,失業率壓低到百分之三點八,似乎沒有太大的困難。比較令人擔憂的,是台灣對「二氧化碳排放燒烤」的努力極為有限,官方對碳排放超高的大煉鋼廠和石化廠投資案採取令環保界無法認同的態度,將對台灣未來的環境和貿易帶來難以預料的風險! 往者已矣,來者可追。企盼台灣在新的一年,力匡失誤,穩健地迎向未來!
- Sep 14 Fri 2012 22:35
自由行
自由行喬安旅行社自由行提供新加坡自由行、澳門自由行、上海自由行、珠海自由行、巴里島自由行…等,出國旅遊可自由隨心搭配,暢意玩法更自由,兩人成行、機票、酒店、行程任選,享受歡樂自由行。大陸旅遊包含華東旅遊、華北旅遊、華中華南旅遊、西南旅遊、西帛琉北旅遊等地區,內容精彩豐富的實地美景照片,讓您不得不身歷其境體驗其中的讚嘆。其他還有九寨天堂九寨溝、彩雲南飛昆大麗、愚自樂園桂林、色界江南、動感北京、絲路…等都是您不可錯過的最佳旅遊景點。喬安旅行社社東南亞旅遊包含泰國旅遊、越南旅遊、巴里島酒店兼職旅遊、柬埔寨旅遊、新加坡旅遊…等,另有深情浪漫的韓國之旅,帶您走入熱門的韓劇景點拍攝地,一起體會韓劇的浪漫氣息,體驗不同的韓國文化。 旅行社項目 高雄旅行社 >團體旅遊 高雄旅行社 >大陸旅遊 高雄旅行社 >東南亞旅遊 高雄旅行社 >團體機票 酒肉朋友高雄旅行社 >蜜月旅行 高雄旅行社 >大陸入台 高雄旅行社 >自由行 高雄旅行社 >便宜機票 團體及員工旅遊專區 團體及員工旅遊 >團體旅遊估價 團體及員工旅遊 >國內訂房 團體及員工旅遊 >企業專區 團體及員工旅遊 >同業專區 團體及員工旅遊 >合作小型辦公室夥伴 團體及員工旅遊 >精華答客問 自由行專區 自由行>精選自由行 自由行>團體自由行>東京 自由行>團體自由行>關島 自由行>精選自由行>上海 自由行>精選自由行 自由行>團體自由行>峇里島 自由行>精選自由行>珠海 自由行>團體自由行>大阪 自由行ARMANI>團體自由行>新加坡 自由行>精選自由行>澳門 自由行>團體自由行>澳門 自由行>團體自由行>上海 自由行>精選自由行>香港 自由行>團體自由行>濟州 自由行>團體自由行>帛琉 自由行>航空自由行 自由行>團體自由行>首爾 自由行>團體自由行>北京 褐藻醣膠自由行>團體自由行>香港 大陸旅遊專區 大陸旅遊 >華北 大陸旅遊 >西南 大陸旅遊 >華東 大陸旅遊 >華中華南 大陸旅遊 >西北 東南/北亞旅遊專區 東南亞旅遊 東南亞旅遊 >峇里島 東北亞旅遊 >韓國 東南亞旅遊 >泰國 東南亞旅遊 >柬埔寨 東北亞旅個人信貸遊 >日本 東南亞旅遊 >越南 東南亞旅遊 >新加坡 蜜月旅行專區 歐美紐澳南亞 蜜月旅行 >紐西蘭 蜜月旅行 >加拿大 蜜月旅行 >美國 蜜月旅行 >澳洲 蜜月旅行 >歐美紐澳 浪漫歐洲 蜜月旅行 >法國 蜜月旅行 >西班牙 蜜月旅行 >西德 蜜月旅行 吳哥窟>英國 蜜月旅行 >匈牙利 蜜月旅行 >丹麥 蜜月旅行 >奧地利 蜜月旅行 >捷克 蜜月旅行 >比利時 蜜月旅行 >希臘
三級片solid;PADDING-RIGHT:1.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:1.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:144pt;PADDING-TOP:0cm;BORDER-BOTTOM:windowtext 0.5pt solid;BACKGROUND-COLOR:transparent;" vAlign="top" width="
- Sep 14 Fri 2012 00:39
王記肉粽~
王記肉粽~肉粽熱賣 供不應求,氣質美女固定會在每週六、日現場演奏喔靠著肉粽起家,發展至今有五家分有巢氏房屋店的王記肉粽,選擇在老店的對街設立新的據點,舊店新開,並且安排氣質美女現場演奏,生意比以前還要建築設計好!光是一天就可以賣出上千顆粽子喔!從老店到旗艦店,一路發展過來可以說是「十年有成」,他們將傳新成屋統的小吃發揚光大,並且在傳統和現代之間找到新的經營模式,同時也創造出滾滾商機! 擴展新據點 粽香關鍵字行銷傳千里,王記肉粽尊重傳統 保證有家鄉味別人不以為意的傳統小吃,在王凱洋夫婦的眼裡,是感情也是商機酒店打工,每一顆肉粽有他們濃濃的家香味,也有相當大的市場利益,他們將傳統肉粽成功經營,就算景氣再怎麼不裝潢好,還是可以大筆投資、氣派裝潢;把客人當作家人,把每一天當作端午節,<王記肉粽>旗艦店結婚27754032西寧分店23893233漢口分店帛琉23511521http://www.ttv.com.tw/HomeV2/news/deep/deep.asp?MGID=A4&PMID=303&PEBID=952&MGName=發現酒肉朋友新台幣&EyeBrowTitle=發現新台幣