程序間通訊方式

2021-07-05 00:11:57 字數 1308 閱讀 4296



程序間通訊主要包括管道, 系統ipc(包括訊息佇列,訊號量

,共享儲存), socket套接字。

windows系統程序間通訊

windows提供了多種機制,使得應用程式之間能夠快速、方便地共享資料和資訊。這些機制包括rpc、com、ole、dde、訊息、剪下板、郵件槽、管道、套接字等。但是,如果在同一臺機器上的多個程序間進行通訊的話,那麼上面的機制都與共享記憶體有關。這在windows上稱作記憶體對映檔案。

這種資料共享機制是通過讓兩個或多個程序對映同一檔案對映物件的檢視來實現,這意味著程序間共享相同的物理儲存頁面。因此,當乙個程序在檔案對映物件的檢視中寫入資料時,其他的程序會在它們的檢視中立刻看到變化。但是,對多個程序共享同乙個檔案對映物件來說,所有程序使用的檔案對映物件的名稱必須完全相同。

linux系統程序間通訊

linux下的程序間通訊機制大致包括:管道、訊號(在windows上成為訊息)、訊號佇列(實際是訊息鍊錶)、共享記憶體、訊號量、套接字。

管道(pipe)及有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。

訊號或者訊息(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身。

共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。

訊號量(semaphores)機制是一種卓有成效的

程序同步

工具。訊號量(semaphore),有時被稱為訊號燈,是在多執行緒環境下使用的一種設施,是可以用來保證兩個或多個關鍵**段不被

併發呼叫。在進入乙個關鍵**段之前,執行緒必須獲取乙個訊號量;一旦該關鍵**段完成了,那麼該執行緒必須釋放訊號量。

抽象的來講,訊號量的特性如下:訊號量是乙個非負整數(車位數),所有通過它的

執行緒/程序(車輛)都會將該整數減一(通過它當然是為了使用資源),當該整數值為零時,所有試圖通過它的執行緒都將處於等待狀態。在訊號量上我們定義兩種操作: wait(等待) 和 release(釋放)。當乙個執行緒呼叫wait操作時,它要麼得到資源然後將訊號量減一,要麼一直等下去(指放入阻塞佇列),直到訊號量大於等於一時。release(釋放)實際上是在訊號量上執行加操作,對應於車輛離開停車場,該操作之所以叫做「釋放」是因為釋放了由訊號量守護的資源。

訊息佇列是訊息的鏈結表,訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點;而訊號量主要作為程序間以及同一程序不同執行緒之間的同步手段。

程序間通訊方式

謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...

程序間通訊方式

遇到一考題,讓寫出程序間的通訊方式,突然給忘了,只想起管道和共享記憶體以及套接字。現在總結一下程序間的通訊方式以及他們之間的區別 1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pip...

程序間通訊方式

程序與管道建立連線,程序fork產生子程序,關閉不需要的連線從而構成管道。由於fork機制,管道只能用於父程序和子程序之間。linux提供了fifo方式連線程序,fifo是一種特殊的檔案型別,在檔案系統中有對應路徑,當乙個程序以讀方式開啟該檔案,而另乙個程序以寫方式開啟該檔案,核心就會在兩個程序間建...