IPC 應用三 訊息佇列

2021-09-02 07:44:50 字數 2695 閱讀 7465

目錄

一:訊息佇列

1.1定義

1.2設計方案

1.3知識了解

二:**實現

2.1傳送訊息

2.2取用訊息

2.3測試執行

訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號標識。

如圖所示:先呼叫msgget()獲取乙個已存在,或者 建立乙個新的佇列。a程序負責傳送某一型別的資料,b程序負責接受相應型別的資料。

一:相關結構

①訊息結構:

//假設傳送的最長訊息是512個位元組

②每個訊息佇列都會維護乙個相關資料結構:msqid_ds

//訊息佇列維護資訊。

struct msqid_ds

二:相關函式①函式:msgget

標頭檔案 函式原型:#include

int msgget(key_t key,int flag)

引數:key:用於變換成乙個識別符號(id)

flag:許可權,以及各種控制資訊的指定。

功能:建立乙個新佇列或者開啟乙個現有佇列。(主要是和其他函式配套使用,msgctl,msgsnd,msgrcv)。

函式返回值:成功返回訊息佇列id,出錯返回-1.

②函式:msgctl

函式原型:int msgctl ( int msgid, int cmd , struct msqid_ds *buf);

函式引數:1 msgid :佇列編號

2 cmd :(幻數),用於指定命令,ipc_stat,ipc_set,ipc_rmid.

3 buf:指向結構體的指標。

函式功能:對佇列進行多種操作。

③函式:msgsnd

函式原型

int msgsnd ( int msgid , const void* ptr , size_t nbytes , int flag)

函式引數:1 msgid:佇列編號

2 ptr :指向乙個mesg的結構體(本結構體不是標頭檔案提供的)

3 nbytes: 訊息大小。

4 flag(幻數),用於指定命令,ipc_nowait(非阻塞標誌)。

函式功能和返回值:將資料傳送到訊息佇列中:

成功返回0,失敗返回-1.

④函式:msgrcv

函式原型:

int msgrcv ( int msgid , void* ptr , size_t nbytes,long type , int flag);

函式引數:

msgid 佇列編號

ptr 指向乙個mesg結構體指標

nbytes 訊息大小

type 訊息型別

flag(幻數) 用於制定命令,ipc_nowait(非阻塞標誌)。

函式功能和返回值:

從訊息佇列中取資料。 成功,返回訊息佇列資料部分的長度,否則返回-1。

IPC 訊息佇列

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

IPC 訊息佇列

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

IPC之訊息佇列

訊息佇列缺點 1.如果程序建立了乙個訊息佇列,在該佇列中放入了幾則訊息,然後終止,但是該訊息佇列及其內容並不會被刪除。直到出現一下情況 某個程序呼叫msgrcv或 msgctl讀訊息或刪除訊息佇列,某個程序執行ipcrm 1 命令刪除訊息佇列,或由正在啟動的系統刪除訊息佇列。2.訊息佇列有大小限制,...