是在記憶體中建立的,讀取效率非常高
分為新增訊息,讀取訊息兩個動作
訊息是乙個結構體。第乙個成員是型別(大於等於1的值)。
傳送訊息,需要設定訊息型別。讀取的時候要指定訊息型別
如:1號訊息,2號訊息
由程式設計師去確定訊息的型別。
#
include
#include
#include
/*msgget()建立或者獲取乙個訊息佇列
msgget()成功返回訊息佇列 id,失敗返回-1
msq***: ipc_creat
*/int
msgget
(key_t key,
int msq***);/*
msgsnd()傳送一條訊息,訊息結構為:
struct msgbuf
;msgsnd()成功返回 0, 失敗返回-1
msqsz: 指定 mtext 中有效資料的長度
msq***:一般設定為 0(滿了,自動阻塞住) 可以設定 ipc_nowait
*/int
msgsnd
(int msqid,
const
void
*msqp,
size_t msqsz,
int msq***);/*
msgrcv()接收一條訊息
msgrcv()成功返回 mtext 中接收到的資料長度, 失敗返回-1
msqtyp: 指定接收的訊息型別,型別可以為 0
msq***: 一般設定為 0 可以設定 ipc_nowait
msgp 和寫入的是同乙個型別的結構體
*/ssize_t
msgrcv
(int msqid,
void
*msgp,
size_t msqsz,
long msqtyp,
int msq***);/*
msgctl()控制訊息佇列
msgctl()成功返回 0,失敗返回-1
cmd: ipc_rmid
設定或者刪除訊息
*/int
msgctl
(int msqid,
int cmd,
struct
msqid_ds
*buf)
;
訊息新增滿了也會阻塞住
每執行一次,就新增1次訊息
vi a.c
#
include
#include
#include
#include
#include
#include
typedef
struct
msgdata
//定義訊息
執行結果如下:
讀一次訊息,就少1條
如果讀取2號型別訊息
阻塞住了,因為沒有2號型別訊息
可以新增2號型別訊息來解決阻塞情況
訊息型別要》=1,因為0有特殊的意義
如果接收訊息設定為0,接收所有訊息,不區分訊息的型別
但是傳送時不能把訊息設定為0
訊息隊列為空或者滿,執行程式,自動阻塞
linux訊息佇列 Linux訊息佇列
訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...
linux訊息佇列
訊息佇列是核心位址空間中的內部鍊錶,每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,只需提供該訊息佇列的鍵值即可。1 訊息緩衝區結構 存放訊息資料的模板,可在基本定義的基礎上自己定義 在include linux msg.h中宣告,描述如下 struct 可以定義自己的例...
linux 訊息佇列
一 訊息佇列的基本概念 訊息佇列 也叫做報文佇列 是unix系統v版本中3種程序間通訊機制之一。另外兩種是訊號燈和共享記憶體。這些ipc機制使用共同的授權方法。只有通過系統呼叫將標誌符傳遞給核心之後,程序才能訪問這些資源。這種系統ipc物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資...