訊息佇列的通訊原理及建立訊息佇列程式設計收發資料

2021-10-12 23:05:24 字數 2289 閱讀 5948

1.訊息佇列,是訊息的鏈結表,存放在核心中,乙個訊息佇列由乙個識別符號(即佇列id)來標識。

2.特點:

3.訊息佇列相關api

<1> int msgget(key_t key, int flag);

功能:開啟或建立訊息佇列。

返回值:成功返回佇列id,失敗返回-1

引數說明:

*<2> int msgsnd(int msqid, const void ptr, size_t size, int flag);

功能:新增訊息

返回值:成功返回0,失敗返回-1

引數說明:

*<3> int msgrcv(int msqid, void ptr, size_t size, long type,int flag);

功能:讀取訊息

返回值:成功返回訊息資料的長度,失敗返回-1

引數說明:

*<4> int msgctl(int msqid, int cmd, struct msqid_ds buf);

功能:控制訊息佇列

返回值:成功返回0,失敗返回-1

引數說明:

4.demo:

// 獲取訊息端

#include

#include

#include

#include

#include

struct msgbuf

;int

main()

msgrcv

(msgid,

&readbuf,

sizeof

(readbuf.mtext)

,888,0

);// 讀取訊息

printf

("read from que:%s\n"

,readbuf.mtext)

;struct msgbuf sendbuf =

;msgsnd

(msgid,

&sendbuf,

strlen

(sendbuf.mtext),0

);// 傳送訊息

msgctl

(msgid,ipc_rmid,

null);

// 刪除訊息佇列

return0;

}

// 傳送訊息端

#include

#include

#include

#include

#include

struct msgbuf

;int

main()

;struct msgbuf readbuf;

key_t key;

key =

ftok

("."

,'z');

printf

("key = %x\n"

,key)

;int msgid =

msgget

(key,ipc_creat|

0777);

if(msgid ==-1

)msgsnd

(msgid,

&sendbuf,

strlen

(sendbuf.mtext),0

);printf

("send over\n");

msgrcv

(msgid,

&readbuf,

sizeof

(readbuf.mtext)

,988,0

);printf

("return from get:%s\n"

,readbuf.mtext)

;msgctl

(msgid,ipc_rmid,

null);

return0;

}

執行結果:

訊息佇列通訊

一 訊息佇列概念 訊息佇列就是乙個訊息的鍊錶。而一條訊息可以看做乙個記錄,具有特定的格式,程序可以按照一定的規則新增新訊息,另乙個程序可以從訊息佇列中獨自訊息。二 訊息佇列函式 1.建立 開啟訊息佇列 man msgget key t key int msg 返回值 成功 返回訊息佇列的id 失敗 ...

3 2 2 佇列訊息和非佇列訊息

摘錄於 windows程式 第5版,珍藏版 charles.petzold 著 p60 前面提過 windows 將訊息傳送給乙個視窗,意思是說 windows 呼叫了該視窗的視窗過程。但是,乙個 windows 程式同時還具有乙個訊息迴圈使用者從訊息佇列中檢索和分發訊息,其中檢索訊息是通過呼叫 g...

訊息佇列的原理

簡介 訊息驅動機制是 gui 系統的基礎,訊息驅動的底層基礎設施之一是訊息佇列,它是整個 gui 系統運轉中樞,本文介紹了乙個基於環形佇列的訊息佇列實現方法,給出了它的資料結構 主要操作流程和核心 環形佇列 環行佇列是一種首尾相連的佇列資料結構,遵循先進先出原則,如下圖所示 ring buffer ...