程序間通訊 訊息佇列(一)

2021-06-18 01:52:15 字數 1588 閱讀 9441

訊息佇列基本概念:

訊息佇列是系統核心位址空間中的乙個內部的鍊錶。訊息可以按照順序傳送到佇列中,

也可以以幾種不同的方式從佇列中讀取。每乙個訊息佇列用乙個唯一的ipc識別符號表示。

我們來實現乙個簡單的訊息佇列的工具,用於建立訊息佇列、傳送、讀取訊息、

改變許可權以及刪除訊息佇列。

綜合例項:msgtool

#include #include #include #include #include #include #include #define max_send_size 80

struct mymsgbuf

;void send_message(int qid,struct mymsgbuf *qbuf,long type,char *text);

void read_message(int qid,struct mymsgbuf *qbuf,long type);

void remove_queue(int qid);

void change_queue_mode(int qid,char *mode);

void usage(void);

int main(int argc,char **argv)

key=ftok(".",'m');

if((msgqueue_id = msgget(key,ipc_creat|0777))==-1)

printf("message queue id=[%d]\n",msgqueue_id);

switch(tolower(argv[1][0]))

send_message(msgqueue_id,(struct mymsgbuf *)&qbuf,atol(argv[2]),argv[3]);

break;

case 'r':

if(argc < 3)

read_message(msgqueue_id,&qbuf,atol(argv[2]));

break;

case 'd':

remove_queue(msgqueue_id);

break;

case 'm':

if(argc < 3)

change_queue_mode(msgqueue_id,argv[2]);

break;

default:

usage();

} return 0;

}void send_message(int qid,struct mymsgbuf *qbuf,long type,char *text)

}void read_message(int qid,struct mymsgbuf *qbuf,long type)

void remove_queue(int qid)

void change_queue_mode(int qid,char *mode)

void usage(void)

乙個終端傳送訊息:

./msgtool s 1 "hello"

乙個終端接受訊息:

./msgtool r 0

這時將收到訊息:hello。

程序間訊息佇列通訊

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