Linux程序間通訊

2021-07-09 08:49:32 字數 1380 閱讀 8268

程序間通訊概述

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

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

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

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

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

linux 程序間通訊(ipc)以下以幾部分發展而來:

早期unix程序間通訊、基於system v程序間通訊、基於socket程序間通訊和posix程序間通訊。

unix程序間通訊方式包括:管道、fifo、訊號。

system v程序間通訊方式包括:system v訊息佇列、system v訊號燈、system v共享記憶體、

posix程序間通訊包括:posix訊息佇列、posix訊號燈、posix共享記憶體。

(1) 管道(pipe):管道允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊;

(2) 命名管道(fifo):類似於管道,但是它可以用於任何兩個程序之間的通訊,命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfifo或系統呼叫mkfifo來建立;

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

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

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

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

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

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...