代码
#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;
}
参考链接
- Linux进程间通信(七):消息队列 msgget()、msgsend()、msgrcv()、msgctl()