IPC是Inter-Process Communication的縮寫,意思是進(jìn)程間通信或者跨進(jìn)程通信硝岗,是指兩個(gè)進(jìn)程之間進(jìn)行數(shù)據(jù)交換的過(guò)程壤靶。
進(jìn)程是獨(dú)立的運(yùn)行對(duì)象霹疫,不痛的進(jìn)程在不痛地址空間內(nèi)運(yùn)行全景,所以進(jìn)程之間不會(huì)相互影響艾蓝。但是由于地址空間獨(dú)立,很難進(jìn)行相互通信粪牲,Linux內(nèi)核提供了各種的IPC機(jī)制古瓤,以便實(shí)現(xiàn)進(jìn)程間通信。
Linux內(nèi)核的ICP類型
- 管道:
管道連接兩個(gè)進(jìn)程,一個(gè)進(jìn)程只能進(jìn)行讀取落君,一個(gè)進(jìn)程只能進(jìn)行寫入穿香,只能單向傳遞數(shù)據(jù)(半雙工通信)。(如果想要利用管道在兩個(gè)程序間進(jìn)行全雙工通信绎速,就需要兩個(gè)管道)
管道有局限性皮获,只能用于父進(jìn)程與子進(jìn)程間的通信,以及具有同一父進(jìn)程的進(jìn)程間通訊纹冤,因?yàn)楣艿赖奈募枋龇麩o(wú)法與其它進(jìn)程共享洒宝,只能像父進(jìn)程與子進(jìn)程這樣的特殊關(guān)系下共享描述符 - 消息隊(duì)列:
消息隊(duì)列用于進(jìn)程間的消息交換。進(jìn)程向消息隊(duì)列寫入信息萌京,另一個(gè)進(jìn)程重消息隊(duì)列讀取信息雁歌。 - 共享內(nèi)存:
共享內(nèi)存由內(nèi)核管理,允許進(jìn)程間共享內(nèi)存區(qū)域知残。進(jìn)程向內(nèi)核請(qǐng)求分配共享內(nèi)存后靠瞎,其他程序就可以訪問(wèn)分配的共享內(nèi)存。共享內(nèi)存可以直接訪問(wèn)內(nèi)存求妹,因此可以快速運(yùn)行乏盐。 - 內(nèi)存映射:內(nèi)存映射將打開(kāi)的文件對(duì)應(yīng)到內(nèi)存,并在進(jìn)程間共享內(nèi)存制恍。
- 信號(hào)量:
其他IPC大部分以在進(jìn)程間傳輸數(shù)據(jù)為目的父能,但信號(hào)量用于同步進(jìn)程間的數(shù)據(jù),以及控制訪問(wèn)資源吧趣。 - 套接字:
網(wǎng)絡(luò)套接字支持遠(yuǎn)程計(jì)算機(jī)的進(jìn)程間通信法竞,UNIX套接字提供了同一系統(tǒng)內(nèi)進(jìn)程間通訊的方法,于其它的IPC相比强挫,套接字更通用。
套接字
客戶端-服務(wù)器端模型
在網(wǎng)絡(luò)中首發(fā)信息會(huì)伴隨很復(fù)雜的操作薛躬,所以Linux內(nèi)核提供套接字編程接口俯渤,開(kāi)發(fā)人員可以利用Linux內(nèi)核提供的網(wǎng)絡(luò)連接,終止型宝,數(shù)據(jù)傳輸八匠,域名更改,地址更改等相關(guān)API開(kāi)發(fā)趴酣。