當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 讓你從根本上了解系統(tǒng)函數(shù),簡(jiǎn)單快速
我們都知道C語(yǔ)言,C語(yǔ)言提供了通用的函數(shù)比如fread fwrite fclose,不論你在windows linux還是其他 操作系統(tǒng)上,都可以使用.這就是平臺(tái)無(wú)關(guān)性,所以C語(yǔ)言有很好的移植性.接下來(lái)我們思考一個(gè)問(wèn)題,不同的操作系統(tǒng)windows linux,他們的設(shè)計(jì)肯定不一樣的,windows再設(shè)計(jì)之處肯定不會(huì) 考慮linux的設(shè)計(jì),linux在設(shè)計(jì)之處也不會(huì)向微軟請(qǐng)教.所以問(wèn)題是為什么都可以使用標(biāo)準(zhǔn)的C函數(shù) ?
這要從操作系統(tǒng) 的系統(tǒng)調(diào)用說(shuō)起.高級(jí)的操作系統(tǒng)都分為用戶(hù)態(tài)和內(nèi)核態(tài),說(shuō)白了用戶(hù)態(tài)就是執(zhí)行用戶(hù)程序的,比如QQ 微信.而內(nèi)核是 操作系統(tǒng)管理硬件 內(nèi)存 CPU的,應(yīng)用程序因?yàn)樵谟脩?hù)態(tài)所以無(wú)法訪(fǎng)問(wèn)硬件,這也保證了操作系統(tǒng)的安全性. 但是有時(shí)候應(yīng)用程序需要操作硬件,比如打開(kāi)攝像頭,那怎么辦呢.
解決辦法就是用戶(hù)程序請(qǐng)求操作系統(tǒng)打開(kāi),操作系統(tǒng)接收請(qǐng)求去打開(kāi)硬件.所以真實(shí)的訪(fǎng)問(wèn)過(guò)程不是應(yīng)用程序直接訪(fǎng)問(wèn). 應(yīng)用程序如何請(qǐng)求操作系統(tǒng)呢?這就是系統(tǒng)調(diào)用的功能.因?yàn)椴煌牟僮飨到y(tǒng)管理方式 硬件訪(fǎng)問(wèn)方式幾乎完全不同,所以不同的操作系統(tǒng)提供了完全不同的系統(tǒng)調(diào)用接口.這些接口 又稱(chēng)為系統(tǒng)函數(shù).
比如常見(jiàn)的linux下API:read write close open socket都是系統(tǒng)函數(shù) ,可以完成操作系統(tǒng)的各種功能.windows上API 是不相同的,所以如果你直接使用這些系統(tǒng)函數(shù),寫(xiě)出來(lái)的代碼不具有移植性.
那怎么辦呢?解決方法就是對(duì)系統(tǒng)函數(shù)封裝一層,封裝為C庫(kù). C庫(kù) 對(duì)外提供統(tǒng)一的接口,不同的操作系統(tǒng)提供不同的C庫(kù),但是不同的C庫(kù)對(duì)外提供相同的 API,這也就保證了你基于C庫(kù)開(kāi)發(fā)的代碼在不同的操作系統(tǒng)上具有 很好的移植性.記住,是很好,而不是絕對(duì)的.針對(duì)一些特殊的功能,我們也是針對(duì)操作系統(tǒng)進(jìn)行處理.
下面一張圖來(lái)解釋他們之間的關(guān)系: