Linux程序間的通訊方式

2021-06-19 06:48:33 字數 1912 閱讀 9000

(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 高階管道通訊 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式...

Linux程序間通訊方式

目錄前言 一 程序間通訊的目的 二 linux程序間通訊方式簡介 程序間的通訊就是在不同程序之間傳播或者交換資訊。程序的使用者空間是相互獨顯然可以體用這幾樣的立的,一般而言是不能互相訪問的,唯一的例外是共享空間。但是系統空間卻是 公共場所 所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪...

linux程序間通訊方式

1 管道 pipe 2 命名管道 named pipe 3 訊號 signal 4 訊息 message 佇列 5 共享記憶體 6 訊號量 semaphore 7 套接字 socket 1 管道 pipe 管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。2 ...