程序篇 程序間通訊《訊息佇列》

2021-09-26 09:45:48 字數 872 閱讀 6656

訊息佇列就是訊息的鍊錶,存放在核心中並由訊息佇列識別符號表示。

訊息佇列提供了乙個從乙個程序向另乙個程序傳送資料塊的方法,每乙個資料塊都可以被認為是有乙個型別,接收者接受的資料塊可以有不同的型別。

但是和管道類似的是,它有乙個不足就是每個訊息的最大長度是有上限的(msgmax),每個訊息佇列的總的位元組數(msgmnb),系統上訊息佇列的總數上線(msgmni)。

核心為每個ipc物件維護了乙個資料結構struc ipc_perm,用於標識訊息佇列,讓程序知道當前操作的是那個訊息佇列。

每乙個msqid_ds 表示乙個訊息佇列,並通過msqid_ds.msg_first、msg_last 維護乙個先進先出的msg鍊錶佇列,當傳送乙個訊息到該訊息佇列時,把傳送的訊息佇列構造成乙個msg的結構物件,並新增到msqid_ds.msg_first、msg_last維護的鍊錶佇列。

#include#include#includeint msgget(key_t key, int msgflag);
引數

key: 某個訊息佇列的名字,用ftok()產生

msgflag: 有兩個選項ipc——creat 和 ipc_excl,單獨使用ipc_creat,如果訊息佇列不存在則建立之,如果存在則開啟返回;單獨使用ipc_excl是沒有意義的;兩個同時使用,如果訊息佇列不存在則建立之,如果存在就出錯返回。

返回值: 成功安徽乙個非負整數,即訊息佇列的標識碼,失敗返回-1

#include#includekey_t ftok(const char *pathname ,int proj_id);

呼叫成功返回乙個key值,用於建立訊息佇列,如果失敗,返回-1;

程序間訊息佇列通訊

要保證server能夠接收client的訊息,就必須保證server的生成的msg的識別符號是一樣的,也就是兩個用的key是必須一樣的。msglucy.c include include include include include include include include include ...

程序間通訊(訊息佇列)

在嵌入式linux應用開發中,linux程序通訊的方式有6種,分別是管道 pipe 及有名管道 named pipe 訊號 signal 訊息佇列 msg 共享記憶體 shm 訊號量 和套接字 socket 在這我就簡單的描述一下程序通訊中的資訊佇列 msg 首先,訊息佇列的實現有重要的幾步 1 建...

程序間通訊 訊息佇列

有三種稱作xsi ipc的ipc 訊息佇列 訊號量以及 共享記憶體。它們只見有很多的相似之處。訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號表示。它不同於管道,其生命週期是隨核心的。訊息佇列提供了 一種從 乙個程序向另 乙個程序傳送 乙個資料塊的 方法。每個資料塊都被認為是有 乙個型別,接...