linux系統的程序間通訊有哪幾種方式

2021-12-24 05:20:43 字數 2324 閱讀 3245

1樓:檀香透窗櫺

一、方式

1、管道(pipe)及有名管道( mkpipe):

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

2、訊號(signal):

訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身。

linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction。

實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式。

3、訊息佇列(message):

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

4、共享記憶體:

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

5、訊號量(semaphore):

主要作為程序間以及同一程序不同執行緒之間的同步手段。

6、套介面(socket):

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

二、概念

程序間通訊概念:

ipc—-interprocess communication

每個程序各自有不同的使用者地址空間,任何一個程序的全域性變數在另一個程序中都看不到所以程序之間要交換資料必須通過核心。

在核心中開闢一塊緩衝區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊。

擴充套件資料

1)無名管道:

管道是半雙工的,資料只能向一個方向流動;需要雙方通訊時,需要建立起兩個管道;只能用於父子程序或者兄弟程序之間(具有親緣關係的程序)。

管道對於管道兩端的程序而言,就是一個檔案,但它不是普通的檔案,它不屬於某種檔案系統,構成兩程序間通訊的一個媒介。

資料的讀出和寫入:一個程序向管道中寫的內容被管道另一端的程序讀出。寫入的內容每次都新增在管道緩衝區的末尾,並且每次都是從緩衝區的頭部讀出資料。

2)有名管道:

不同於管道之處在於它提供一個路徑名與之關聯,以fifo的檔案形式存在於檔案系統中。這樣,即使與fifo的建立程序不存在親緣關係的程序,只要可以訪問該路徑,就能夠彼此通過fifo相互通訊(能夠訪問該路徑的程序以及fifo的建立程序之間)。

因此,通過fifo不相關的程序也能交換資料。值得注意的是,fifo嚴格遵循先進先出(first in first out),對管道及fifo的讀總是從開始處返回資料,對它們的寫則把資料新增到末尾。它們不支援諸如lseek()等檔案定位操作。

2樓:匿名使用者

# 管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。

# 有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

# 訊號量( semophore ) : 訊號量是一個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。

因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

# 訊息佇列( message queue ) : 訊息佇列是由訊息的連結串列,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

# 訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

# 共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由一個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。

它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。

# 套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。

3樓:匿名使用者

管道訊息佇列

unix domain socket

共享記憶體訊號量

程序有哪幾種基本狀態,程序的基本狀態有哪三種

程序一般分為5中基本狀態 建立態 就緒態 執行態 阻塞態 退出態建立態 初始化系統資源 就緒態 不能執行 因為沒有cpu資源,需要和別的程序搶奪cpu資源,獲得cpu資源後進入執行態 執行態 程序獲得cpu,程序將cpu使用完成後會強制失去cpu變成就緒態阻塞態 執行的程序 有cpu資源 收到某些條...

在linux系統的目錄結構中,可以有幾個根目錄

2 linux檔案系統的最頂端是 稱 為linux的root,也就是 linux作業系統的檔案系統。linux的檔案系統的入口就是 所有的目錄 檔案 裝置都在 之下,就是linux檔案系統的組織者,也是最上級的領導者。3 根目錄是整個系統最重要的乙個目錄,因為不但所有的目錄都是由根目錄衍生出來的,同...

轉向系統有哪些型別,汽車轉向系統的分類有哪些?

汽車轉向系統分為兩大類機械轉向系統和動力轉向系統。機械轉向系統,機械轉向系統以駕駛員的體力作為轉向能源,其中所有傳力件都是機械的。機械轉向系由轉向操縱機構 轉向器和轉向傳動機構三大部分組成。動力轉向系統是兼用駕駛員體力和發動機動力為轉向能源的轉向系。在正常情況下,汽車轉向所需能量,只有一小部分由駕駛...