程序間通訊 IPC 方法

2021-04-19 01:12:05 字數 861 閱讀 7921

程序間通訊(ipc)方法主要有以下幾種:   

管道/fifo/共享記憶體/訊息佇列/訊號量  

1.管道中還有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式    

2.訊息佇列是用於兩個程序之間的通訊,首先在乙個程序中建立乙個訊息佇列,然後再往訊息佇列中寫資料,而另乙個程序則從那個訊息佇列中取資料。需要注意的是,訊息佇列是用建立檔案的方式建立的,如果乙個程序向某個訊息佇列中寫入了資料之後,另乙個程序並沒有取出資料,即使向訊息佇列中寫資料的程序已經結束,儲存在訊息佇列中的資料並沒有消失,也就是說下次再從這個訊息佇列讀資料的時候,就是上次的資料!!!!    

3.訊號量,它與windows下的訊號量是一樣的,所以就不用多說了    

4.共享記憶體,類似於windows下的dll中的共享變數,但linux下的共享記憶體區不需要像dll這樣的東西,只要首先建立乙個共享記憶體區,其它程序按照一定的步驟就能訪問到這個共享記憶體區中的資料,當然可讀可寫      

以上幾種方式的比較:    

1.管道:速度慢,容量有限,只有父子程序能通訊    

2.fifo:任何程序間都能通訊,但速度慢    

4.訊號量:不能傳遞復雜訊息,只能用來同步    

5.共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體

unix的看《unix網路程式設計》第二卷。   

windows的看《windws核心程式設計》  

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...