消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性。与命名管道相比,消息队列的优势在于,它独立于发送和接收进程而存在。
消息队列函数的定义如下所示:
#include<sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);//消息队列的控制函数
int msgget(key_t key, int msgflg);//创建很访问一个消息队列
int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);//从一个消息队列中获取消息
int msgsnd(int msqid, const void *msg_ptr,size_tmsg_sz,int msgflg);//把消息添加到消息队列中
msg1.c用于接收消息,msg2.c用于发送消息
msg1.c
/* Here's the receiver program. */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/msg.h>
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_