151 Linux訊息佇列

2021-10-17 11:59:55 字數 2652 閱讀 8947

是在記憶體中建立的,讀取效率非常高

分為新增訊息,讀取訊息兩個動作

訊息是乙個結構體。第乙個成員是型別(大於等於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物件使用的控制方法和檔案系統非常類似。使用物件的引用標誌符作為資...