進程:進程是計算機運行的基本單位,利用多進程能夠實現系統的多任務;可是,在多進程的任務中,進程之間的通訊是比較麻煩的,由於,進程之間使用的是不一樣的進程空間,因此,編寫多進程的系統,首先要決解進程之間的通訊。 linux
linux/unix下的進程間的通訊主要分爲兩大類: 編程
一、基於文件的IPC; 數組
二、基於內存的IPC;; 網絡
基於文件的IPC又能夠分爲如下幾類:基於普通文件的IPC、基於管道文件的IPC、基於socket文件的IPC。基於內存的IPC包括:基於共享內存的IPC,基於共享隊列的IPC,基於信號量的IPC。 socket
普通文件的IPC:使用普通文件的IPC是決解進程間通訊的最基本方式,進程訪問和操做普通文件;可是,基於普通文件IPC的一個主要技術問題是,一個進程改變了該文件,可是其餘沒法感知到文件的變化,爲決解這個問題,可使用一個特殊的文件:管道文件。 函數
基於管道文件的IPC:管道是進程間通訊的主要手段之一。管道文件其實是一個只存在於內存中的文件,對管道的操做實際是對兩個文件的操做,分別表示對管道文件的讀和寫,根據管道的建立方式,管道文件能夠分爲普通管道和匿名管道;可是,匿名管道只能使用在父子進程之間。 工具
基於socket的IPC:基於socket的IPC主要使用在網絡編程之中,是一種比較重要的文件通訊方式。基於文件的IPC主要分爲兩種模型:對等模型和C/S模型,對等模型主要用於udp編程,而C/S模型主要用於Tcp編程。 spa
基於內存的IPC:在介紹基於內存的IPC以前,首先要先介紹一下一組內核內存的工具(ipcs),ipcsipcs命令往標準輸出寫入一些關於活動進程間通訊設施的信息,ipcs能夠指定查看的具體信息,如ipcs -m 查看共享內存, -q:查看共享隊列,ipcs -s查看共享信號量,以上3中都不指定時則是查看共享內存、共享隊列和共享信號量; unix
基於共享內存的IPC:基於共享內存的編程模型是:首先須要建立(獲得)一個共享內存,獲得一個ID;而後把該ID對應的共享內存映射爲虛擬地址(掛載);而後就可使用虛擬地址訪問內核的共享內存(使用與內存相關的函數和運算符號);最後就是卸載虛擬地址和刪除共享內存。 隊列
基於共享隊列的IPC:基於共享隊列的編程模型是:首先須要建立(獲得)共享隊列;而後使用共享隊列;最後記得刪除該共享隊列。
基於信號量的IPC:信號量是共享內存整數數組,根據須要定義指定數組的長度,信號量就是根據數組中的值,決定阻塞仍是解除阻塞;基於信號量的編程模型是:建立(獲得)信號量;而後初始化信號量中指定下標的值;而後根據信號量阻塞或者是解除阻塞;最後刪除信號量。
對linux/unix的進程間通訊的基本方式介紹到此;詳細的內容將分別進行描述。