linux系統的程序間通訊有哪幾種方式

時間 2021-12-24 05:19:56

1樓:檀香透窗櫺

一、方式

1、管道(pipe)及有名管道( mkpipe):

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

2、訊號(signal):

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

linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction。

實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式。

3、訊息佇列(message):

訊息佇列是訊息的連結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

4、共享記憶體:

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

5、訊號量(semaphore):

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

6、套介面(socket):

更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由unix系統的bsd分支開發出來的,但現在一般可以移植到其它類unix系統上:linux和system v的變種都支援套接字。

二、概念

程序間通訊概念:

ipc—-interprocess communication

每個程序各自有不同的使用者地址空間,任何一個程序的全域性變數在另一個程序中都看不到所以程序之間要交換資料必須通過核心。

在核心中開闢一塊緩衝區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊。

擴充套件資料

1)無名管道:

管道是半雙工的,資料只能向一個方向流動;需要雙方通訊時,需要建立起兩個管道;只能用於父子程序或者兄弟程序之間(具有親緣關係的程序)。

管道對於管道兩端的程序而言,就是一個檔案,但它不是普通的檔案,它不屬於某種檔案系統,構成兩程序間通訊的一個媒介。

資料的讀出和寫入:一個程序向管道中寫的內容被管道另一端的程序讀出。寫入的內容每次都新增在管道緩衝區的末尾,並且每次都是從緩衝區的頭部讀出資料。

2)有名管道:

不同於管道之處在於它提供一個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中。這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊(能夠訪問該路徑的程序以及fifo的建立程序之間)。

因此,通過fifo不相關的程序也能交換資料。值得注意的是,fifo嚴格遵循先進先出(first in first out),對管道及fifo的讀總是從開始處返回資料,對它們的寫則把資料新增到末尾。它們不支援諸如lseek()等檔案定位操作。

2樓:匿名使用者

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

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

# 訊號量( semophore ) : 訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。

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

# 訊息佇列( message queue ) : 訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

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

# 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。

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

# 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。

3樓:匿名使用者

管道訊息佇列

unix domain socket

共享記憶體訊號量

Linux有什麼功能,Linux作業系統的功能有哪些?

北京迅為 開發板新增語音合成和繼電器功能並設定開機自啟動。 開源,我們用的xp要1700多,而linux免費 linux作業系統的功能有哪些?linux主要是幹什麼用的? 景田不是百歲山 主要是用於後端伺服器作業系統 linux是一種自由和開放原始碼的類unix作業系統。它能執行主要的unix工具軟...

Linux作業系統對電子資訊工程專業有哪些幫助 左右

1 什麼是linux作業系統?未來的發展趨勢。2 什麼是電子資訊工程專業?未來的發展趨勢。3 後者在前者那裡能得到什麼好處?比如開放式源 的思路對電子資訊工程有什麼啟發意義 嵌入式模組對電子資訊工程的設計施工提供哪些便利。前倆段寫個300 400字問題不大,最後那個找這個思路再擴充套件一下,600字...

通訊類SDK是什麼?通訊類的SDK服務有哪些

比如說工作寶sdk,是把將工作寶的部分功能封裝好,通過函式介面的方式開放出去,開發者可通過呼叫這些開發包在自己的產品或系統中實現這些功能。通訊類的sdk服務有哪些?比如免費開源的e聊sdk,它也是一款即時通訊sdk,支援多平臺。工作寶的sdk,帶有即時訊息 會議 voip ip pbx整合等功能,可...