Linux下程序通訊方式(簡要概述)

2022-08-16 08:45:11 字數 1925 閱讀 2160

(1)管道(pipe):管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。

(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfifo或系統呼叫mkfifo來建立。

(3)訊號(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式)。

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

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

(7)訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。

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

程序間通訊主要可以分為兩大類:

1. 傳遞控制資訊(程序間的低階通訊); 2. 傳送大批量資料(程序間的高階通訊)

主要的通訊方式主要有:

1. 主從式通訊方式(master-servant communication):

通訊的程序雙方存在一種主從式的隸屬關係。主程序是程序的控制者,從程序是程序的從屬者。主要有以下特點:

主程序對從程序的資料區和資源享有使用權,但是從程序卻不能使用主程序的資料區和資源;

(2)主程序控制從程序的工作和動作過程;

(3)程序的主從關係確定後,整個通訊過程中不再改變從屬關係;

eg: 終端控制程序和終端程序

2. 會話式通訊(dialogue communication)

通訊的雙方採用請求和回應請求的方式進行通訊。通訊雙方分別叫做使用程序和服務程序。主要有以下特點:

(1) 通訊時,使用程序要得到服務程序的允許,方能使用服務程序;

(2) 服務程序是根據使用程序的請求服務的,而且在通訊中,服務程序始終為控制程序;

(3) 程序在確定會話式方式時要建立固定的邏輯關聯關係;

3. 訊息或郵件通訊

通訊的雙方地位對等,特點如下:

(1) 傳送程序能否傳送資訊,只與訊息的緩衝區或郵箱中是否有足夠大的空閒空間來滿足這次通訊。與將訊息傳送到的目的程序的狀態無關。

(2)傳送程序與接收程序間不要建立直接的邏輯關係;

(3)訊息的接受和傳送要通過訊息緩衝或者郵箱來完成。

4. 共享儲存區的通訊方式

特點:(1) 通訊時,通訊的資料或資訊不發生儲存移動;

(2) 需要互動時,通訊雙方通過乙個共享儲存區完成通訊

(3) 共享儲存區中的資料可以作為需要互動程序的一部分儲存在程序體中;

unix主要支援三種通訊方式:

1. 基本通訊:主要用來協調程序間的同步和互斥

(1)鎖檔案通訊

通訊的雙方通過查詢特定目錄下特定型別的檔案(稱鎖檔案)來完成程序間對臨界資源訪問時的互斥;例如程序p1訪問乙個臨界資源,首先檢視是否有乙個特定型別檔案,若有,則等待一段時間再查詢鎖檔案。

(2)記錄鎖檔案

2. 管道通訊:適應大批量的資料傳遞

3. ipc :適應大批量的資料傳遞

Linux下程序通訊方式

1 管道 pipe 管道可用於具有親緣關係程序間的通訊,答應乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 命名管道 named pipe 命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還答應無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkf...

Linux下程序間通訊方式 管道

管道 pipe 是 一種最基本的ipc機制,由pipe函式建立 include int pipe int filedes 2 呼叫pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描符,filedes 0 指向管道的讀端...

Linux程序通訊方式

a linux系統中程序間通訊方式有哪些?q linux系統主要的通訊方式有六種,分別如下。1.管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。2.訊號 signa...