消息队列实现接收发送的例子
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 }