使用 ipcs -q 查看消息队列的消息接收情况
队列消息读取端
/*MessageRead.c */
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<errno.h>
#include<string.h>
#define MAX_TEXT 512
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};
int main()
{
int running = 1;
struct my_msg_st some_data;
int msgid;
long int msg_to_receive = 0;
msgid = msgget((key_t)1234,0666 | IPC_CREAT);
if (msgid == -1){
fprintf(stderr,"msgget failed with error: %d\n",errno);
exit(1);
}
while(running){
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 with error :%d\n",errno);
exit(1);
}
return 0;
}
队列消息写入端
/*MessageWrite.c */
#include<stdlib.h>
#include<errno.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>
#define MAX_TEXT 512
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};
int main()
{
int running = 1;
struct my_msg_st some_data;
int msgid;
char buffer[BUFSIZ];
printf("BUFSIZ = %d\n",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: ");
fgets(buffer,BUFSIZ,stdin);
some_data.my_msg_type = 1;
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;
}
详细可参考博客:https://blog.youkuaiyun.com/wei_cheng18/article/details/79661495