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

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

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

     libuv是用純c語言寫的(排除里面有幾處內聯(lián)匯編的用法),怎么還有繼承呢?繼承不都是c++、java、python等這些更高級語言才有的特性嗎?不錯,類似c++這些高級語言,從語言層面就支持了面向對象的三大特性:繼承、封裝與多態(tài),c語言作為一門歷史悠久、簡潔高效的語言,雖然沒有從語言層次提供復雜的對象管理機制,但是通過巧妙的設計也可以寫出面向對象的思想,這在linux內核中體現(xiàn)的淋漓盡致,比如在內核的驅動部分,我們通常在編寫一個字符設備驅動程序時,一定會操作的一個結構體:file_operations(定義在下方),就在一個struct中實現(xiàn)了方法和屬性的封裝,相應的還有其他結構定義充分的利用了“組合”來實現(xiàn)面向對象的“繼承”特性。

復制代碼
 1 struct file_operations {  2 struct module *owner;  3 loff_t(*llseek) (struct file *, loff_t, int);  4 ssize_t(*read) (struct file *, char __user *, size_t, loff_t *);  5
        		

網(wǎng)友評論