Linux 程序間通訊2

2021-08-13 04:36:07 字數 1181 閱讀 2429

一、共享記憶體 

1、 共享記憶體是被多個程序共享的一部分物理記憶體.共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以                  立刻 看到其中的內容

2.、共享記憶體實現分為兩個步驟:

一、建立共享記憶體,使用shmget函式

二、對映共享記憶體,將這段建立的共享記憶體對映到具體的程序空間去,使用shmat函式

3、當乙個程序不再需要共享記憶體時,需要把它從程序位址空間中脫離。

int shmdt ( char *shmaddr )

二、訊息佇列

1、訊息佇列就是乙個訊息的鍊錶.可以把訊息看作乙個記錄,具有特定的格式.程序可以向中按照一定的規則新增新訊息;另一些程序則可以從訊息佇列中讀走訊息

2、目前主要有兩種型別的訊息佇列:

posix訊息佇列以及系統v訊息佇列,系統v訊息佇列目前被大量使用

3、訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,必須提供該訊息佇列的鍵值

4、key_t ftok (char*pathname, char proj)

功能:   返回檔名對應的鍵值。

pathname:  檔名

proj:     專案名(不為0即可)   

5、int msgsnd(int msqid,struct          msgbuf*msgp,int msgsz,int msg***)

功能:向訊息佇列中傳送一條訊息

6、msqid:    已開啟的訊息佇列id

msgp:     存放訊息的結構

msgsz:   訊息資料長度

msg***:   傳送標誌,有意義的msg***標誌為ipc_nowait,指明在訊息佇列沒有足夠空間容納要傳送的訊息時,msgsnd是否等待

三、訊號燈

訊號量(又名:訊號燈)與其他程序間通訊方式不大相同,主要用途是保護臨界資源.

程序可以根據它判定是否能夠訪問某些共享資源。除了用於訪問控制外,還可用於程序同步

二值訊號燈:訊號燈的值只能取0或1,類似於互斥鎖。 但兩者有不同:

訊號燈強調共享資源,只要共享資源可用,其他程序同樣可以修改訊號燈的值;

互斥鎖更強調程序,占用資源的程序使用完資源後,必須由程序本身來解鎖。

計數訊號燈:訊號燈的值可以取任意非負值

linux下程序間通訊(2)

1.訊息佇列 訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少 管道只能承載無格式位元組流以及緩衝區大小受限等缺點。2.訊息佇列結構定義 struct msqid ds msgque msgmni 向量 msgque msgmni 是乙個msqid ds結構...

Linux程序間通訊 2 訊號

unix網路程式設計 卷2 程序間通訊 第2版 中文版 訊號本質 訊號是在軟體層次上對中斷機制的一種模擬。在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的。訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。訊號可以直接進行使用者空...

程序間通訊2

什麼是訊號量 為了防止出現因多個程式同時訪問乙個共享資源而引發的一系列問題,我們需要一種方法,它可以通過生成並使用令牌來授權,在任一時刻只能有乙個執行程序訪問 的臨界區域。臨界區域是指執行資料更新的 需要獨佔式地執行。而訊號量就可以提供這樣的一種訪問機制,讓乙個臨界區同一時間只有乙個程序在訪問它,也...