聲明:本文為原創(chuàng)博文,轉(zhuǎn)載請(qǐng)注明出處。

     句柄(handle)代表一種對(duì)持有資源的索引,句柄的叫法在window上較多,在unix/linux等系統(tǒng)上大多稱之為描述符,為了抽象不同平臺(tái)的差異,libuv使用統(tǒng)一的結(jié)構(gòu)封裝了不同平臺(tái)的實(shí)現(xiàn),接下來就看看這個(gè)抽象的過程。由于句柄的實(shí)現(xiàn)和系統(tǒng)平臺(tái)有很大關(guān)系,本文只針對(duì)unix平臺(tái)作源碼分析。

一、抽象的開始----封裝、繼承、多態(tài)

     libuv是用純c語言寫的(排除里面有幾處內(nèi)聯(lián)匯編的用法),怎么還有繼承呢?繼承不都是c++、java、python等這些更高級(jí)語言才有的特性嗎?不錯(cuò),類似c++這些高級(jí)語言,從語言層面就支持了面向?qū)ο蟮娜筇匦裕豪^承、封裝與多態(tài),c語言作為一門歷史悠久、簡(jiǎn)潔高效的語言,雖然沒有從語言層次提供復(fù)雜的對(duì)象管理機(jī)制,但是通過巧妙的設(shè)計(jì)也可以寫出面向?qū)ο蟮乃枷耄@在linux內(nèi)核中體現(xiàn)的淋漓盡致,比如在內(nèi)核的驅(qū)動(dòng)部分,我們通常在編寫一個(gè)字符設(shè)備驅(qū)動(dòng)程序時(shí),一定會(huì)操作的一個(gè)結(jié)構(gòu)體:file_operations(定義在下方),就在一個(gè)struct中實(shí)現(xiàn)了方法和屬性的封裝,相應(yīng)的還有其他結(jié)構(gòu)定義充分的利用了“組合”來實(shí)現(xiàn)面向?qū)ο蟮摹袄^承”特性。