1.源码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <unistd.h>
#include <fcntl.h>
#include <mqueue.h>
#include <errno.h>
int main()
{
mqd_t mqid;
char *msg = "yuki";
int i;
mqid = mq_open("/1.que", O_RDWR|O_CREAT|O_EXCL, 0666, NULL);
if(mqid < 0)
{
if(errno == EEXIST)
{
mq_unlink("/1.que");
mqid = mq_open("/1.que", O_RDWR|O_CREAT|O_EXCL, 0666, NULL);
}
else
{
perror("open message queue error...");
return -1;
}
}
if(fork() == 0)
{
struct mq_attr mqattr;
char *buf = NULL;
mq_getattr(mqid, &mqattr);
buf = (char *)malloc(mqattr.mq_msgsize);
for(i=0; i<5; i++)
{
if(mq_receive(mqid, buf, mqattr.mq_msgsize, NULL) < 0)
{
perror("receive message failed...");
continue;
}
printf("receive message %d: %s\n", i+1, buf);
}
free(buf);
exit(0);
}
for(i=0; i<5; i++)
{
if(mq_send(mqid, msg, sizeof(msg), i) < 0)
{
perror("send message");
continue;
}
printf("send message %d: %s successful\n", i+1, msg);
sleep(1);
}
return 0;
}
2.编译源码
$ gcc -o test test.c -lrt
3.运行及其结果
$ ./test
send message 1: yuki successful
receive message 1: yuki
send message 2: yuki successful
receive message 2: yuki
send message 3: yuki successful
receive message 3: yuki
send message 4: yuki successful
receive message 4: yuki
send message 5: yuki successful
receive message 5: yuki
网友评论