首页 > 技术文章 > 消息队列实现接收发送的例子

wystan 2015-06-22 11:27 原文

msg消息队列,实线不同进程之间的通信,主要依靠key来识别:

发送端

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/types.h>
 5 #include <sys/msg.h>
 6 #include <unistd.h>
 7 #include <time.h>
 8 #include <sys/ipc.h>
 9 struct msgmbuf{
10     int mtype;
11     char mtext[40];
12 };
13 
14 int main()
15 {
16     int ret = -1;
17     int msg_flags,msg_id;
18     key_t key;
19     struct msqid_ds msg_info;
20     struct msgmbuf msg_mbuf;
21     key = 1024;
22     msg_flags = IPC_CREAT;
23 
24     while(1)
25     {
26         msg_id = msgget(key,msg_flags|0666);
27         if(-1==msg_id)
28         {
29             printf("create message failed!\n");
30             return 0;
31         }
32         printf("Input message to send:");
33         scanf("%s",msg_mbuf.mtext);
34         getchar();
35         msg_mbuf.mtype = 10;
36         ret = msgsnd(msg_id,&msg_mbuf,sizeof(struct msgmbuf),0);
37         if(-1==ret)
38         {
39             printf("send message failed!\n");
40         }
41     
42     }
43     return 0;
44 }

接收端:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <sys/types.h>
 5 #include <sys/msg.h>
 6 #include <unistd.h>
 7 #include <time.h>
 8 #include <sys/ipc.h>
 9 struct msgmbuf{
10         int mtype;
11         char mtext[40];
12     };
13 
14 int main()
15 {
16     int ret = -1;
17     int msg_flags,msg_id;
18     key_t key;
19     struct msgmbuf msg_mbuf;
20     key =1024;
21     msg_flags = IPC_CREAT;
22     while(1)
23     {
24         msg_id = msgget(key,msg_flags|0666);
25         if(-1==msg_id)
26         {
27             printf("create message failed!\n");
28             return 0;
29         }
30     
31         ret = msgrcv(msg_id,&msg_mbuf,sizeof(struct msgmbuf),0,0);
32         if(-1==ret)
33         {
34             printf("receive message failed!\n");
35         }
36         else
37         {
38             printf("receive message successful!message[%s]\n",msg_mbuf.mtext);
39         }
40 
41     }
42     return 0;
43 }

 

推荐阅读