程序間通訊 訊息佇列

2021-08-24 23:44:28 字數 1928 閱讀 2288

訊息佇列其實就是乙個鍊錶,往訊息佇列寫資料解釋向煉表裡插入乙個訊息節點,從訊息佇列裡拿資料就是訪問該節點,訪問完刪除該節點。乙個訊息佇列由識別符號來標識

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