IPC物件 共享記憶體和訊息佇列

2021-06-27 09:06:34 字數 1002 閱讀 1410

ipc物件包括:是活動在核心級別的一種

程序間通訊

的工具,是一種機制。

目前linux也支援這三種機制:共享記憶體、訊息佇列、訊號燈集。

1、ipc

struct ipc_perm;

key比較關鍵,是識別這個共享通道的鑰匙。

在這三種機制中都會用到這個建立的key;

一般用 ftok這個函式來建立鑰匙。

key_t ftok( char * fname, int id ) 

例如:if ((key = ftok(".", 's')) < 0)

這樣就產生了乙個key,其實也可以自己定義key,但是這樣定義的key不安全。所以盡量用ftok來產生key。

2、共享記憶體:

它是一種最為高效的程序間通訊方式,程序可以直接讀寫記憶體,不需要任何資料的拷貝為了在多個程序間交換資訊,

核心專門留出了一塊記憶體區,可以有需要訪問的程序將其對映到自己的私有位址空間,所以核心就不需要資料拷貝的操作,

這樣子一來就提高了程序的效率(核心來處理問題比程序來的快)。

而實現共享記憶體有2個步驟:1、在核心中建立出一塊共享記憶體。(shmget())

2、將共享記憶體對映到程序的對映區。(shmat())

3、撤銷對映的操作。(shmdt())

3、訊息佇列:

顧名思義,訊息佇列就是一些訊息的列表,使用者可以在佇列中新增和讀取訊息等操作。

在某些方面(主要是讀取操作)與fifo的一些特性很相像,甚至可以說就是一樣的。但是比fifo更有優勢,因為它可以實現訊息的隨機查詢。

這些訊息存在核心中,都有乙個「佇列id」來標識。

實現訊息佇列有4步驟:1、建立或開啟佇列(msgget()),建立佇列的數量受到系統訊息佇列的限制。

2、新增訊息(msgsnd()),把訊息新增到已開啟的訊息佇列的末尾。

3、讀取訊息(msgrcv()),根據「佇列id」取走訊息佇列中指定的訊息。

4、控制訊息佇列(msgctl()),訊息佇列的移除撤銷。

linux 訊息佇列 和 共享記憶體

1.基本知識 存在於核心中2.基本流程及函式 傳送 接收 1 申請key值 2 建立 開啟 訊息佇列 3 傳送訊息 建立結構體 typedef struct msg t 1 key t key ftok 5 if key 0 2 int msgid msgget key,ipc creat 0777...

IPC 訊息佇列

include int msgget key t key,int msg 返回值 若成功,返回訊息佇列id 若出錯返回 1 與其他ipc機制一樣,需要提供乙個鍵值key來命名某個特定的訊息佇列。可通過ftok 來生成。msg 表示訊息佇列訪問許可權。可與兩個巨集配合進行操作 ipc creat 如果...

IPC 訊息佇列

訊息佇列可以認為是乙個訊息列表。執行緒可以往訊息佇列中放置訊息或者取出訊息。每個訊息都是一條記錄,由傳送者賦予乙個優先順序。乙個程序在往乙個訊息佇列中寫入訊息之前,不需要有某個程序在該佇列上等待訊息到達 這跟管道和fifo是相反的 訊息佇列具有隨核心的持續性,也就是說在核心重新啟動之前,不管發訊息的...