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