liunx六大程序間通訊方式

2021-10-01 05:57:47 字數 1182 閱讀 8730

liunx六大程序間通訊方式

管道,訊息佇列,共享記憶體,訊號量,socket,訊號,檔案鎖

1,管道

1,匿名管道:

2,命名管道: 

3,特點:

1,面向位元組流,

2,生命週期隨核心

3,自帶同步互斥機制。

4,半雙工,單向通訊,兩個管道實現雙向通訊。

2,訊息佇列

1,概念:在核心中建立一佇列,佇列中每個元素是乙個資料報,不同的程序可以通過控制代碼去訪問這個佇列。

訊息佇列提供了⼀個從⼀個程序向另外⼀個程序傳送⼀塊資料的⽅法。

每個資料塊都被認為是有⼀個型別,接收者程序接收的資料塊可以有不同的型別值                          

訊息佇列也有管道⼀樣的不⾜,就是每個訊息的最⼤⻓度是有上限的(msgmax),

每個訊息隊 列的總的位元組數是有上限的(msgmnb),系統上訊息佇列的總數也有⼀個上限(msgmni)

2,特點:

1, 訊息佇列可以認為是乙個全域性的乙個鍊錶,鍊錶節點鐘存放著資料報的型別和內容,有訊息佇列的識別符號進行標記。

2,訊息佇列允許乙個或多個程序寫入或者讀取訊息。

3,訊息佇列的生命週期隨核心。

4,訊息佇列可實現雙向通訊。

3,訊號量     

1,概念

在核心中建立乙個訊號量集合(本質是個陣列),陣列的元素(訊號量)都是1,使用p操作進行-1,使用v操作+1,

(1) p(sv):如果sv的值⼤大於零,就給它減1;如果它的值為零,就掛起該程序的執⾏ 。

(2) v(sv):如果有其他程序因等待sv而被掛起,就讓它恢復運⾏,如果沒有程序因等待sv⽽掛起,就給它加1。

pv操作用於同一程序,實現互斥。

pv操作用於不同程序,實現同步。

2,功能:

對臨界資源進行保護。       

4,共享記憶體      

1,概念:

將同一塊物理記憶體一塊對映到不同的程序的虛擬位址空間中,實現不同程序間對同一資源的共享。

共享記憶體可以說是最有用的程序間通訊方式,也是最快的ipc形式。

2,特點:

1,不用從使用者態到核心態的頻繁切換和拷貝資料,直接從記憶體中讀取就可以。

2,共享記憶體是臨界資源,所以需要操作時必須要保證原子性。使用訊號量或者互斥鎖都可以。

3,生命週期隨核心。     

程序間通訊《六》

posix 有名訊號燈。posix有名訊號燈 和 基於記憶體的訊號燈乙個很明顯的區別是初始化不一樣 posix 有名訊號燈的初始化如下 sem t sem open const char name,intoflag sem t sem open const char name,intoflag,mo...

(六) 程序間通訊

程序間通訊 ipc 程序間通訊的原因 資料傳輸 資源共享 通知事件 程序控制 程序間通訊方式 1.管道 pipe 和命名管道 fifo 最古老的ipc,但目前很少使用 2.訊號 signal 3.訊息佇列 重點 4.共享記憶體 5.訊號量 6.套接字 socket a.管道通訊 單向的 先進先出的 ...

Liunx程序間通訊之管道

目錄 管道 pipe 管道的侷限性 管道的建立 fork使用管道使父子程序進行通訊 程式設計實現 執行結果 執行結果分析 管道是unix系統ipc的最古老的形式,所有的unix系統都提供此種通訊機制。管道的實質是乙個核心緩衝區,程序以先進 先出 fifo,first in first out 的方式...