主要有如下方式:管道、
訊號、訊息佇列
、共享記憶體
、訊號量
、套接字,本文選擇幾種大概介紹,後續會對比較重要的專門發文介紹。
1.管道
管道分為有名管道和匿名管道,匿名管道只能在有親緣關係的程序間通訊,有名管道克服這個缺點。
值得注意的是,只有在管道有讀端時,往管道中寫資料才有意義。否則,向管道寫資料的程序會接收到核心發出來的sigpipe訊號;應用程式可以自定義該訊號處理函式,或者直接忽略該訊號。
read(pipefd),如果管道為空,且沒有寫端,直接返回0.
2.訊號
訊號是unix
系統中使用的最古老的程序間通訊的方法之一,os
通過訊號來通知某一程序發生了某一種預定好的事件;接收到訊號的程序可以選擇不同的方式處理該訊號,一是可以採用預設處理機制-程序中斷或退出,一是忽略該訊號,還有就是自定義該訊號的處理函式,執行相應的動作。
3.共享記憶體
共享記憶體是ipc最快的,一旦這樣的記憶體區域對映到共享它的程序的位址空間,這些程序間的資料傳遞就不在涉及核心。然而往該共享記憶體區存放資訊或從中取走資訊的程序通常需要某種形式的同步。
這裡說的「不涉及核心」的含義是:程序不再通過執行任何進入核心的系統呼叫來彼此傳遞資料。顯然,核心必須建立允許各個程序共享該記憶體區的記憶體對映關係,然後一直管理該記憶體區。
4.訊息佇列
前面我們說到,管道如果沒有讀出者在,寫入者是沒有意義的。然後訊息佇列卻不同,在某個程序往乙個佇列寫入訊息之前,並不需要另外某個程序在該佇列上等待訊息的到達(即讀取訊息)。
乙個程序可以往訊息佇列寫入一些訊息,然後終止,再讓另外乙個程序在以後某個時刻讀出這些訊息。因為訊息佇列具有隨核心的持續性,這跟管道是不同的,當乙個管道關閉的時候,管道中的資料將丟棄。
程序間通訊方法總結
程序間通訊方法總結 程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成 乙個是作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方 另乙個是位址空間,它包含所有的可執行模組或dll模組的 和資料。它還包含動態分配的空間。如執行緒堆疊和堆分配空間。每個程序被賦予它自...
程序間通訊方法總結
具有兩個對外埠,乙個稱為讀端,乙個稱為寫端。乙個程序在管道的寫端寫資料,另乙個程序從管道的讀端讀取資料。管道僅侷限於父程序與子程序之間的通訊。管道通訊的特點 1.管道通訊是單向的,有固定的讀端和寫端。2.資料被程序從管道讀出後,在管道中該資料就不存在了。3.當程序去讀取空管道的時候,程序阻塞。4.當...
程序間通訊方法
1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 named pipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關 系 程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令m...