一、進程間通信(IPC)介紹
進程間通信(IPC,InterProcess Communication)是指在不同進程之間傳播或交換信息。
IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不同主機上的兩個進程IPC。
二、管道
管道,通常指無名管道,是 UNIX 系統(tǒng)IPC最古老的形式。
1、特點:
它是半雙工的(即數(shù)據(jù)只能在一個方向上流動),具有固定的讀端和寫端。
它只能用于具有親緣關系的進程之間的通信(也是父子進程或者兄弟進程之間)。
它可以看成是一種特殊的文件,對于它的讀寫也可以使用普通的read、write 等函數(shù)。但是它不是普通的文件,并不屬于其他任何文件系統(tǒng),并且只存在于內(nèi)存中。
2、原型:
1 #include 2 int pipe(int fd[2]); // 返回值:若成功返回0,失敗返回-1
當一個管道建立時,它會創(chuàng)建兩個文件描述符:fd[0]為讀而打開,fd[1]為寫而打開。如下圖:
若要數(shù)據(jù)流從父進程流向子進程,則關閉父進程的讀端(fd[0])與子進程的寫端(fd[1]);反之,則可以使數(shù)據(jù)流從子進程流向父進程。
三、命名管道
運行此代碼時,會卡?。醋枞?,只有當運行一個以可寫此文件的點C文件時(如下),上述代碼才不會被阻塞
讀5次數(shù)據(jù):(其中每隔1秒鐘寫一次,防止數(shù)據(jù)沖突)
代碼參考:pjj@pjj-virtual-machine:~/文檔/Perfect/IPC/read.c
pjj@pjj-virtual-machine:~/文檔/Perfect/IPC/write.c
四、消息隊列
消息隊列,是消息的鏈接表,存放在內(nèi)核中。一個消息隊列由一個標識符(即隊列ID)來標識。
1、特點
消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優(yōu)先級。
消息隊列獨立于發(fā)送與接收進程。進程終止時,消息隊列及其內(nèi)容并不會被刪除。
消息隊列可以實現(xiàn)消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。
對于B:
1、創(chuàng)建隊列
2、寫數(shù)據(jù)到隊列
3、、、、、、、
審核編輯 黃宇
-
Linux
+關注
關注
87文章
11232瀏覽量
208960 -
IPC
+關注
關注
3文章
346瀏覽量
51839
發(fā)布評論請先 登錄
相關推薦
評論