1.管道:管道是Linux支持的最初Unix IPC形式之一,具備如下特色:linux
通常文件的I/O函數均可以用於管道,如close、read、write等等。web
從管道中讀取數據:函數
向管道中寫入數據:spa
管道可用於輸入輸出重定向,它將一個命令的輸出直接定向到另外一個命令的輸入。orm
管道的主要侷限性正體如今它的特色上:對象
2.FIFO:隊列
它能夠運行於多個非親屬關係間交換信息。進程
FIFO的打開規則:ip
若是當前打開操做是爲讀而打開FIFO時,若已經有相應進程爲寫而打開該FIFO,則當前打開操做將成功返回;不然,可能阻塞直到有相應進程爲寫而打開該FIFO(當前打開操做設置了阻塞標誌);或者,成功返回(當前打開操做沒有設置阻塞標誌)。內存
若是當前打開操做是爲寫而打開FIFO時,若是已經有相應進程爲讀而打開該FIFO,則當前打開操做將成功返回;不然,可能阻塞直到有相應進程爲讀而打開該FIFO(當前打開操做設置了阻塞標誌);或者,返回ENXIO錯誤(當前打開操做沒有設置阻塞標誌)。
從FIFO中讀取數據:
約定:若是一個進程爲了從FIFO中讀取數據而阻塞打開FIFO,那麼稱該進程內的讀操做爲設置了阻塞標誌的讀操做。
注:若是FIFO中有數據,則設置了阻塞標誌的讀操做不會由於FIFO中的字節數小於請求讀的字節數而阻塞,此時,讀操做會返回FIFO中現有的數據量。
向FIFO中寫入數據:
約定:若是一個進程爲了向FIFO中寫入數據而阻塞打開FIFO,那麼稱該進程內的寫操做爲設置了阻塞標誌的寫操做。
對於設置了阻塞標誌的寫操做:
對於沒有設置阻塞標誌的寫操做:
3.XSI IPc結構
他們都屬於內核中的IPC結構, 它們都用標識符來描述. 這個標識符是一個非負整數, 與文件描述符不一樣的是, 建立時並不會重複利用經過刪除回收的整數, 而是每次+1, 直到整數最大值迴轉到0.
標識符是IPC對象的內部名, 而它的外部名則是key(鍵), 它的基本類型是key_t, 在頭文件<sys/types.h>中定義爲長整型. 鍵由內核變換成標識符.
xsi ipc缺點:消息隊列和共享內存中的內容不會被自動刪除;不使用文件描述符,沒法使用多路轉接i/o函數:select和poll
優勢:可靠,流是受控的;能夠用非先進先出方式處理
(1)消息隊列
消息隊列最大的靈活性在於,咱們能夠本身定義傳遞給隊列的消息的數據類型,消息隊列比流通道稍耗內存
(2)共享內存
是一種最快的IPC
(3)信號量
在linux上,記錄縮與信號量相比,多耗事60%;可是想實現簡單功能,通常仍是用記錄所,由於其更簡單。