訊息佇列其實就是乙個鍊錶,往訊息佇列寫資料解釋向煉表裡插入乙個訊息節點,從訊息佇列裡拿資料就是訪問該節點,訪問完刪除該節點。乙個訊息佇列由識別符號來標識
2.1 msgget函式---開啟或建立訊息佇列
標頭檔案:#include
#include
函式實現 int msgget(key_t key, int msg***);
//key:訊息佇列的名字
//msg***:只開啟:0;建立:ipc_creat|0644
//返回值:訊息佇列的id,相當於檔案描述符
例:建立乙個訊息佇列
#include#include#include#include#includeint main()
else
return 0;
}
2.2 magsnd函式--向訊息佇列中放資料函式實現 int msgsnd(int msqid,//msgget的返回值
const void *msgp, //要把訊息發到哪
size_t msgsz, //訊息的位元組數,不包括訊息型別的大小
int msg***);//0
返回值:成功返回0,失敗返回-1
訊息結構:
struct msgbuf;
int main(int argc,char* argv)
int id=msgget(1234,0);//開啟訊息佇列
2.3 msgrcv從訊息佇列中取資料
函式實現 ssize_t msgrcv(int msqid,
void *msgp,//取出來的訊息放在那裡
size_t msgsz,//裝訊息的地方的大小,不包括型別
long msgtyp,//取哪個型別的訊息
int msg***);//0
例:從訊息佇列拿訊息
#include#include#include#include#includestruct msgbuf
;//usage ./msgrcv 通道號
int main(int argc,char* argv)
int id=msgget(1234,0);//開啟訊息佇列
if(id==-1)
struct msgbuf mb;
memset(&mb,0x00,sizeof(mb));
if(msgrcv(id,&mb,1000,atoi(argv[1]),0)==-1)
printf("%s\n",mb.mtext);
return 0;
}
(1)可看到同一訊息佇列的兩個程序間都可用訊息佇列進行通訊
(2)訊息佇列可用於雙向通訊
(3)訊息佇列是面向資料報的形式進行資料傳輸,因為接受的資料都是指定的型別
(4)訊息的生命週期隨核心,當刪除訊息佇列或關閉終端時訊息佇列不銷毀
(5)訊息佇列自帶同步與互斥
(1)建立的訊息佇列的個數有限,每條訊息裡存放的內容也有限
(2)通過訊息佇列進行通訊時,從核心到使用者、再從使用者到核心切換的時候,浪費空間與時間
程序間訊息佇列通訊
要保證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 訊息佇列 訊號量以及 共享記憶體。它們只見有很多的相似之處。訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號表示。它不同於管道,其生命週期是隨核心的。訊息佇列提供了 一種從 乙個程序向另 乙個程序傳送 乙個資料塊的 方法。每個資料塊都被認為是有 乙個型別,接...