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 }