Linux系統程式設計(七)訊息佇列

2021-10-20 03:18:01 字數 1611 閱讀 3182

四、訊息佇列與命名管道的比較

訊息佇列是訊息的鍊錶,存放在核心中並由訊息佇列識別符號表示。核心為每個ipc物件維護了乙個資料結構structipc_perm,用於標識訊息佇列,讓程序知道當前操作的是哪個訊息佇列。每乙個msgid_ds表示–乙個訊息佇列,並通過msqid ds.msg_ first、 msg_ last維護乙個先進先出的msg鍊錶佇列,當傳送一 乙個訊息到該訊息佇列時,把傳送的訊息構造成乙個msg的結構物件,並新增到msqid_ ds.msg. first、 msg. last維護的鍊錶佇列

**如下(示例):

#include

#include

#include

#include

#include

#include

#define pub_msg_type 10

#define max_text 512

typedef

struct msg_st

msg_t;

typedef

struct stu_t

stu_t;

intmain()

//傳送訊息佇列

msgsnd

(msgpid,

&msg,

sizeof

(msg_t),0

);return0;

}

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define pub_msg_type 10

#define max_text 512

typedef

struct msg_st

msg_t;

typedef

struct stu_t

stu_t;

intmain()

//接收訊息佇列

msgrcv

(msgpid,

&msg,

sizeof

(msg_t)

, pub_msg_type,0)

;memcpy

(&stu,

&msg.mtext,

sizeof

(stu_t));

cout <<

"msgtype = "

<< msg.msg_type <<

" , name = "

<< stu.name<<

" : "

<

return0;

}

訊息佇列跟命名管道有不少的相同之處,通過與命名管道一樣,訊息佇列進行通訊的程序可以是不相關的程序,同時它們都是通過傳送和接收的方式來傳遞資料的。在命名管道中,傳送資料用write,接收資料用read,則在訊息佇列中,傳送資料用msgsnd,接收資料用msgrcv。而且它們對每個資料都有乙個最大長度的限制。

訊息佇列的優點:

Linux系統程式設計 POSIX訊息佇列

posix訊息佇列就是程序之間通訊的方式之一,其特點是以訊息的形式交換資料 資料的交換單位是整個訊息 posix訊息佇列和system v訊息佇列相比,有以下優點 訊息通知特性允許乙個程序能在一條訊息進入之前為空的訊息佇列時候,非同步的通過訊號或者執行緒的例項化接收通知 linux下可以通過poll...

《Linux系統程式設計 程序間通訊 訊息佇列》

訊息佇列提供了一種在兩個不相關的程序之間傳遞資料的簡單高效的方法,其特點如下 1 訊息佇列可以實現訊息的隨機查詢。訊息不一定要以先進先出的次序讀取,程式設計時可以按訊息的型別讀取。2 訊息佇列允許乙個或多個程序向它寫入或者讀取訊息。3 與無名管道 命名管道一樣,從訊息佇列中讀出訊息,訊息佇列中對應的...

Linux系統程式設計 程序間通訊 訊息佇列

include include include include define msg text 512 訊息結構體 struct my msg st int main int argc,char ar while idx 5 idx return 0 include include include ...