linux程序間通訊概述

2022-03-20 11:35:23 字數 1088 閱讀 4989

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。

資料傳輸:乙個程序需要將它的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾兆位元組之間。

共享資料:多個程序想要操作共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到。

通知事件:乙個程序需要向另乙個或一組程序傳送訊息,通知它(它們)發生了某種事件(如程序終止時要通知父程序)。

資源共享:多個程序之間共享同樣的資源。為了作到這一點,需要核心提供鎖和同步機制。

程序控制:有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序的所有陷入和異常,並  能夠及時知道它的狀態改變。

linux下程序間通訊的幾種主要手段簡介:

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

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

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

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

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

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

程序間通訊概述

一,為什麼程序間需要通訊?1 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序。2 資源共享 多個程序之間共享同樣的資源。3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件。4 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序此時控制程序希望能夠攔截另乙個程...

程序間通訊概述

1 資料傳輸 乙個程序需要將它的資料傳送給另乙個程序。2 資源共享 多個程序共享同樣的資源。3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知他們發生了某件事情。4 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序 此時控制程序希望能夠攔截另乙個程序的所有操作,並能夠及時知道...

程序間通訊概述

一 順序程式與併發程式特徵 順序程式特徵 順序性 封閉性 執行環境的封閉性 確定性可再現性 併發程式特徵 共享性 併發性隨機性 二 程序互斥 1 由於各程序要求共享資源,而且有些資源需要互斥使用,因此各程序間競爭使用這些資源,程序的這種關係為程序的互斥 2 系統中某些資源一次只允許乙個程序使用,稱這...