讓你從根(gen)本上了解系(xi)統(tong)函數,簡單快速
時間:2018-06-21 來(lai)源:未知
我們(men)都知道(dao)C語言(yan),C語言(yan)提供了通用的(de)函(han)(han)數比如(ru)fread fwrite fclose,不論(lun)你(ni)在windows linux還(huan)是其他 操作(zuo)系(xi)統(tong)上,都可(ke)以使用.這(zhe)就是平臺無關(guan)性,所以C語言(yan)有很好的(de)移植性.接下來我們(men)思(si)考一(yi)個問題,不同的(de)操作(zuo)系(xi)統(tong)windows linux,他們(men)的(de)設計肯(ken)定不一(yi)樣的(de),windows再設計之處肯(ken)定不會 考慮linux的(de)設計,linux在設計之處也不會向(xiang)微軟請教(jiao).所以問題是為什么都可(ke)以使用標準(zhun)的(de)C函(han)(han)數 ?
這要從操作(zuo)(zuo)系統(tong) 的(de)(de)(de)系統(tong)調(diao)用(yong)(yong)(yong)說(shuo)起.高(gao)級的(de)(de)(de)操作(zuo)(zuo)系統(tong)都(dou)分為用(yong)(yong)(yong)戶(hu)態和內(nei)核態,說(shuo)白了用(yong)(yong)(yong)戶(hu)態就是執行用(yong)(yong)(yong)戶(hu)程(cheng)序的(de)(de)(de),比(bi)(bi)如QQ 微信.而(er)內(nei)核是 操作(zuo)(zuo)系統(tong)管理硬件 內(nei)存 CPU的(de)(de)(de),應用(yong)(yong)(yong)程(cheng)序因(yin)為在用(yong)(yong)(yong)戶(hu)態所以無法(fa)訪問硬件,這也保(bao)證了操作(zuo)(zuo)系統(tong)的(de)(de)(de)安全性(xing). 但(dan)是有時候應用(yong)(yong)(yong)程(cheng)序需(xu)要操作(zuo)(zuo)硬件,比(bi)(bi)如打開攝像頭,那怎(zen)么辦呢(ni).
解決辦法(fa)就是(shi)用(yong)戶程(cheng)(cheng)序(xu)請求(qiu)操(cao)作(zuo)系(xi)統(tong)(tong)(tong)打(da)開,操(cao)作(zuo)系(xi)統(tong)(tong)(tong)接(jie)收請求(qiu)去打(da)開硬(ying)件.所以(yi)真實的(de)(de)訪(fang)問過程(cheng)(cheng)不是(shi)應用(yong)程(cheng)(cheng)序(xu)直接(jie)訪(fang)問. 應用(yong)程(cheng)(cheng)序(xu)如何請求(qiu)操(cao)作(zuo)系(xi)統(tong)(tong)(tong)呢?這就是(shi)系(xi)統(tong)(tong)(tong)調(diao)用(yong)的(de)(de)功能(neng).因為不同(tong)的(de)(de)操(cao)作(zuo)系(xi)統(tong)(tong)(tong)管(guan)理(li)方式(shi) 硬(ying)件訪(fang)問方式(shi)幾乎完(wan)全不同(tong),所以(yi)不同(tong)的(de)(de)操(cao)作(zuo)系(xi)統(tong)(tong)(tong)提(ti)供了完(wan)全不同(tong)的(de)(de)系(xi)統(tong)(tong)(tong)調(diao)用(yong)接(jie)口.這些接(jie)口 又(you)稱為系(xi)統(tong)(tong)(tong)函數.
比如(ru)常(chang)見的(de)linux下API:read write close open socket都(dou)是系(xi)統函(han)數 ,可以完成操作系(xi)統的(de)各種(zhong)功能(neng).windows上API 是不(bu)相同的(de),所(suo)以如(ru)果(guo)你直接使用這些系(xi)統函(han)數,寫(xie)出來的(de)代碼不(bu)具有移植性.
那怎(zen)么(me)辦呢?解決(jue)方(fang)法(fa)就是(shi)對系統(tong)(tong)函數封裝(zhuang)一(yi)層,封裝(zhuang)為C庫(ku)(ku)(ku). C庫(ku)(ku)(ku) 對外提(ti)供統(tong)(tong)一(yi)的(de)(de)(de)(de)接口(kou),不(bu)同(tong)的(de)(de)(de)(de)操(cao)作系統(tong)(tong)提(ti)供不(bu)同(tong)的(de)(de)(de)(de)C庫(ku)(ku)(ku),但是(shi)不(bu)同(tong)的(de)(de)(de)(de)C庫(ku)(ku)(ku)對外提(ti)供相同(tong)的(de)(de)(de)(de) API,這也就保證了你基于C庫(ku)(ku)(ku)開發(fa)的(de)(de)(de)(de)代碼在不(bu)同(tong)的(de)(de)(de)(de)操(cao)作系統(tong)(tong)上(shang)具有 很好的(de)(de)(de)(de)移植(zhi)性.記住,是(shi)很好,而(er)不(bu)是(shi)絕(jue)對的(de)(de)(de)(de).針對一(yi)些(xie)特(te)殊的(de)(de)(de)(de)功能,我們也是(shi)針對操(cao)作系統(tong)(tong)進行處理.
下(xia)面(mian)一張圖來解釋他們(men)之(zhi)間(jian)的關系:


