![](https://i-blog.csdnimg.cn/blog_migrate/3889640daf3ba0ee127169e497f05949.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e9af14091917615912faceccec9a711f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d83237f8bacb655600357a3c602b8129.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bb9cbcc19efba5ac67708111130a60ee.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5ac4d04fc8bb5696425a6af28ed1620e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc3477ced32866d619aedb20fe964df1.png)
代码
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <string>
#include <signal.h>
#include <wait.h>
#include <sys/msg.h>
#include <cstring>
#define MAX_TEXT 512 //消息队列缓冲区的大小
struct my_msg_st{
long int my_msg_type;
char some_text[BUFSIZ];
};
int main() {
int running = 1;
int msgid;
struct my_msg_st some_data;
long int msg_to_receive = 2;
msgid = msgget((key_t)1234,0666|IPC_CREAT);
if (msgid == -1){
fprintf(stderr,"msgget failed with error:%d\n",errno);
exit(1);
}
while (running){
// printf("Enter some text:");
// some_data.my_msg_type = 1;
if (msgrcv(msgid,(void *)&some_data,BUFSIZ,msg_to_receive,0) == -1){
fprintf(stderr,"msgrcv failed with error:%d\n",errno);
exit(1);
}
printf("You wrote:%s",some_data.some_text);
if (strncmp(some_data.some_text,"end",3)==0){
running = 0;
}
}
if (msgctl(msgid,IPC_RMID,0)==-1){
fprintf(stderr,"msgctl(IPC_RMID failed\n");
exit(1);
}
return 0;
}
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <string>
#include <signal.h>
#include <wait.h>
#include <sys/msg.h>
#include <cstring>
#define MAX_TEXT 512 //消息队列缓冲区的大小
struct my_msg_st{
long int my_msg_type;
char some_text[BUFSIZ];
};
int main() {
int running = 1;
int msgid;
struct my_msg_st some_data;
// long int msg_to_receive = 2;
char buffer[BUFSIZ];
msgid = msgget((key_t)1234,0666|IPC_CREAT);
if (msgid == -1){
fprintf(stderr,"msgget failed with error:%d\n",errno);
exit(1);
}
while (running){
printf("Enter some text:");
some_data.my_msg_type = 1;
fgets(buffer,BUFSIZ,stdin);
some_data.my_msg_type = 2;
strcpy(some_data.some_text,buffer);
if (msgsnd(msgid,(void *)&some_data,MAX_TEXT,0) == -1){
fprintf(stderr,"msgsnd failed!\n");
exit(1);
}
if (strncmp(buffer,"end",3)==0){
running = 0;
}
}
return 0;
}
参考链接