Linux中程序的通訊方式

2022-05-18 16:46:35 字數 1131 閱讀 1017

linux下程序通訊的八種方法:

管道(pipe),

命名管道(fifo),

訊息佇列(message queue),

共享記憶體(shared memory),

訊號量(semaphore),

訊號(signal)

套接字(socket)    

(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下8中程序間通訊方式

1,無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係 2,高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式 3,有名管道 named ...

linux中程序間如何通訊的?

因為程序和執行緒不一樣,他們各自的位址空間不同,互不干擾,主要有以下通訊方式。2,訊號量 你作為同步的一種辦法,當然也算是通訊的一種了,因為多個程序共同依靠訊號量來改變自己的狀態,例如乙個只儲存0,1的訊號量,乙個程序進入臨界區執行p sv 訊號量減1為0,另乙個程序會因為訊號量為0而掛起,當前乙個...

Linux中程序間通訊 共享儲存

今天同樣來看看程序間通訊,前面幾篇介紹了管道,訊號量,訊息佇列,這篇是共享記憶體。共享儲存允許兩個或更多程序共享一給定的儲存區。因為資料不需要在客戶程序和伺服器程序之間複製,所以這是最快的一種ipc。使用共享儲存時要掌握的唯一竅門是多個程序之間對一給定儲存區的同步訪問。若伺服器程序正在將資料放入共享...