聲明:本文為原創(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ū)ο蟮摹袄^承”特性。
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延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26