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 ...