|  | |
| Linux系統調用及用戶編程接口(API) | |
| 1 Linux系統調用 所謂系(xi)統調(diao)用(yong)(yong)(yong)是指操作系(xi)統提(ti)供給用(yong)(yong)(yong)戶程(cheng)(cheng)序(xu)調(diao)用(yong)(yong)(yong)的(de)一組“特殊”接(jie)(jie)口,用(yong)(yong)(yong)戶程(cheng)(cheng)序(xu)可以通(tong)過這(zhe)組“特殊”接(jie)(jie)口獲得操作系(xi)統內核提(ti)供的(de)服務。例如,用(yong)(yong)(yong)戶可以通(tong)過進程(cheng)(cheng)控制(zhi)相關的(de)系(xi)統調(diao)用(yong)(yong)(yong)來創(chuang)建進程(cheng)(cheng)、實現(xian)進程(cheng)(cheng)之間的(de)通(tong)信等(deng)。 在(zai)這(zhe)里,為什么用(yong)戶(hu)程(cheng)序不(bu)能直接(jie)訪(fang)問系統內核(he)提(ti)供的(de)(de)服務呢?這(zhe)是由于在(zai)Linux中,為了更(geng)好地(di)保護內核(he)空(kong)(kong)間,將程(cheng)序的(de)(de)運行空(kong)(kong)間分(fen)為內核(he)空(kong)(kong)間和用(yong)戶(hu)空(kong)(kong)間(也就是常(chang)稱的(de)(de)內核(he)態(tai)和用(yong)戶(hu)態(tai)),它們(men)分(fen)別運行在(zai)不(bu)同(tong)的(de)(de)級別上,邏輯上是相互隔離的(de)(de)。因(yin)此,用(yong)戶(hu)進程(cheng)在(zai)通常(chang)情況下不(bu)允許訪(fang)問內核(he)數據,也無法使用(yong)內核(he)函數,它們(men)只能在(zai)用(yong)戶(hu)空(kong)(kong)間操(cao)作(zuo)用(yong)戶(hu)數據,調用(yong)用(yong)戶(hu)空(kong)(kong)間的(de)(de)函數。 但是,在有些情況下(xia),用戶(hu)空(kong)(kong)(kong)間(jian)的進(jin)程(cheng)需(xu)要獲得一定的系(xi)統(tong)服(fu)務(wu)(調用內(nei)核空(kong)(kong)(kong)間(jian)程(cheng)序),這時操作(zuo)系(xi)統(tong)就必須利用系(xi)統(tong)提供給(gei)用戶(hu)的“特(te)殊(shu)接口”——系(xi)統(tong)調用規(gui)定用戶(hu)進(jin)程(cheng)進(jin)入內(nei)核空(kong)(kong)(kong)間(jian)的具體位置。在進(jin)行(xing)(xing)系(xi)統(tong)調用時,程(cheng)序運行(xing)(xing)空(kong)(kong)(kong)間(jian)需(xu)要從用戶(hu)空(kong)(kong)(kong)間(jian)進(jin)入內(nei)核空(kong)(kong)(kong)間(jian),處理完(wan)成后再(zai)返回(hui)用戶(hu)空(kong)(kong)(kong)間(jian)。 Linux系統(tong)(tong)調(diao)用(yong)(yong)非常精簡(只有(you)250個左右),它繼承(cheng)了UNIX系統(tong)(tong)調(diao)用(yong)(yong)中基本和有(you)用(yong)(yong)的(de)部分。這(zhe)些系統(tong)(tong)調(diao)用(yong)(yong)按(an)照功能邏輯(ji)大致可分為進程控制、進程間通信、文(wen)件系統(tong)(tong)控制、存儲管(guan)(guan)理(li)(li)、網絡管(guan)(guan)理(li)(li)、套接(jie)字控制、用(yong)(yong)戶管(guan)(guan)理(li)(li)等幾(ji)類。 2 用戶編程接口(API)   前面(mian)講到的系統調用并不直接與程(cheng)序員進行交(jiao)互(hu),它僅(jin)僅(jin)是一個通過(guo)軟中斷機制向內核提交(jiao)請求以獲取內核服務的接口。實際使用中程(cheng)序員調用的通常(chang)是用戶編程(cheng)接口——API。 例如,創(chuang)建進程的(de)(de)API函(han)(han)(han)(han)數(shu)(shu)frok()對應(ying)(ying)于內核空間的(de)(de)sys_fork()系(xi)統調(diao)(diao)用(yong)(yong),但并不是所(suo)有的(de)(de)函(han)(han)(han)(han)數(shu)(shu)都(dou)對應(ying)(ying)一(yi)個系(xi)統調(diao)(diao)用(yong)(yong)。有時,一(yi)個API函(han)(han)(han)(han)數(shu)(shu)會需要(yao)幾個系(xi)統調(diao)(diao)用(yong)(yong)來(lai)共同(tong)完成函(han)(han)(han)(han)數(shu)(shu)的(de)(de)功能(neng),甚至(zhi)還有一(yi)些(xie)API函(han)(han)(han)(han)數(shu)(shu)不需要(yao)調(diao)(diao)用(yong)(yong)相應(ying)(ying)的(de)(de)系(xi)統調(diao)(diao)用(yong)(yong)(因此它(ta)所(suo)完成的(de)(de)不是內核提供的(de)(de)服務)。 在(zai)Linux中,用(yong)(yong)戶編程接口(kou)(API)遵循(xun)在(zai)UNIX中流行(xing)的應(ying)用(yong)(yong)編程界面標準(zhun)——Posix標準(zhun)。Posix標準(zhun)是由IEEE和ISO/IEC共(gong)同開發的標準(zhun)系(xi)統,該標準(zhun)基于當(dang)時現有的UNIX實踐和經驗,描述了操(cao)作系(xi)統的系(xi)統調用(yong)(yong)編程接口(kou)(實際上就是API),用(yong)(yong)于保證(zheng)應(ying)用(yong)(yong)程序可以在(zai)源(yuan)代(dai)碼一(yi)級上、在(zai)多種操(cao)作系(xi)統之間移植(zhi)運行(xing)。這些系(xi)統調用(yong)(yong)編程接口(kou)主(zhu)要(yao)是通過C庫(libc)實現的。 3 系統命令  系(xi)統命令相對于API更高了一層(ceng),它實(shi)際(ji)上是一個可執行(xing)程(cheng)序(xu),它的內部引用了用戶編程(cheng)接口(API)來(lai)實(shi)現相應(ying)的功能(neng),它們之間的關系(xi)如圖2.1所示。 
 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈接:      
         1、什么是Linux系統調用,包括哪些內容 |