Linux程序之間的8種通訊方式

2021-07-10 23:35:38 字數 900 閱讀 3470

1.無名管道( pipe )

管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。

程序的親緣關係通常是指父子程序關係。

2.高階管道(popen)

將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,

這種方式我們成為高階管道方式。

3.有名管道 (named pipe)

有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

4.訊息佇列( message queue )

訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。

訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

5.訊號量( semophore )

訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。

它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。

因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

6.訊號 ( sinal )

訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

7.共享記憶體( shared memory )

共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。

共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。

它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。

8.套接字( socket )

套介面也是一種程序間通訊機制,與其他通訊機制不同的是,除了本機的程序間通訊,

它也可用於不同機器間的程序通訊。用於本機器的程序間通訊時,成為本地套接字,用於不同機器之間的

程序間通訊時,稱為網路套接字。

程序之間的8種通訊方式

現在最常用的程序間通訊的方式有訊號 資訊量 訊息佇列 共享記憶體等。程序通訊,就是不同程序之間進行一些 接觸 它們使用的方法基本是相同的,所以只要掌握了一種使用方法,然後記住其他的即可。訊號和訊號量是不同的,它們雖然都可以用來同步和互斥,但是訊號是使用訊號處理器來進行的,訊號量是使用p,v操作來實現...

linux 程序之間 的通訊

在linux程序中有時需要程序之間相互的通訊 mmap 記憶體對映就是其中一種 通過建立檔案對映到磁碟,然後返回乙個指標,這樣就可以對磁碟進行讀取 mmap 系統呼叫使得程序之間通過對映同乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以向訪問普通記憶體一樣對檔案進行訪問,不必再呼...

程序之間通訊

之所以開啟子程序 肯定需要他幫我們完成任務,很多情況下,需要將資料返回給父程序。然而程序記憶體是物理隔離的 1.將共享資料放在檔案中,就是慢 2.管道subprocess 中那個管道只能單向通訊,必須有父子關係 3.共享一塊記憶體區域 得作業系統幫你分配,速度快 from multiprocessi...