linux程序間通訊 IPC 工具

2022-06-23 16:57:14 字數 939 閱讀 2618

0.簡介

ipc工具分為3類:

通訊:即程序間資料的交換。

同步:即程序和執行緒操作的先後順序控制。

訊號:可以作為程序間同步、資料交換的一種技術。

如圖:

ipc通訊可以分為兩類:資料傳輸工具和共享記憶體,資料傳輸是一端使用者程式將資料寫入核心,另一端的使用者程式從核心取出資料。共享記憶體,允許程序間將資料放入共享記憶體中完成資料交換,速度最快。

ipc同步技術有:訊號量、檔案鎖、互斥體與條件變數。

在程式中使用這些工具,都有唯一的識別符號進行區分,如下圖:

這些ipc工具在程式中使用可訪問和永續性如下表:

1.管道與fifo

管道是非常古老的ipc方法,在shell命令列也用過。

例如:ls | wc -l

這個命令就是建立兩個程序執行ls和wc命令,將執行ls命令的程序標準輸出連線到管道的寫入端,執行wc命令的程序將標準輸入連線到管道的讀出端。一個管道是一個位元組流,且只能按順序讀寫,不能隨機讀寫,管道是單向的(也有雙向管道,替換方案是 unix domain 流socket對),可以確保在一個時刻寫入不超過pipe_buf(4096)位元組的操作都是原子的,管道的儲存能力為65536位元組。

建立管道:

#includeint pipe(int filefds[2]); //

0 success,-1 error ,filefds[0] read,filefds[1] write