程序間通訊 訊息佇列範例

2021-09-28 15:50:29 字數 1451 閱讀 8741

訊息佇列和共享記憶體相似,可以用於程序間通訊。

1.c

#include "../common.h"

#define msg_file "./1.c"

struct my_msg

;int main()

printf("key: %d\n",key);

/* 建立訊息佇列 */

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

strcpy(smsg.mbuf,"start");

smsg.mtype = 999; // 傳送的訊息型別

msgsnd(msqid, &smsg, 80, 0);

msgrcv(msqid, &rmsg, 80, 888, 0);// 返回型別為888的第乙個訊息

printf("server: receive msg.mtext is: %s.\n", rmsg.mbuf);

printf("server: receive msg.mtype is: %ld.\n", rmsg.mtype);

if (msgctl(msqid, ipc_rmid, 0) == -1)

}

2.c

#include "../common.h"

#define msg_file "./1.c"

struct my_msg

;int main()

printf("key: %d\n",key);

/* 建立訊息佇列 */

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

msgrcv(msqid, &rmsg, 80, 999, 0);// 返回型別為999的第乙個訊息

printf("server: receive msg.mtext is: %s.\n", rmsg.mbuf);

printf("server: receive msg.mtype is: %ld.\n", rmsg.mtype);

sprintf(smsg.mbuf,"end");

smsg.mtype = 888; // 傳送到佇列的訊息型別

msgsnd(msqid, &smsg, 80, 0);

}

結果:

bekl@ubuntu:~/test/訊息佇列$ ./1

key: 2046887386

server: receive msg.mtext is: end.

server: receive msg.mtype is: 888.

bekl@ubuntu:~/test/訊息佇列$ ./2

key: 2046887386

server: receive msg.mtext is: start.

server: receive msg.mtype is: 999.

程序間訊息佇列通訊

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