函数原型:int msgsnd ( int msgid , struct msgbuf*msgp , int msgsz, int msgflg );
参数说明:
smgbuf结构体定义如下:
struct smgbuf
{
long mtype;
char mtext [x] ; //长度由msgsz决定
}
msgflg 可设置为 IPC_NOWAIT 。如果消息队列已满或其他情况无法送入消息,则立即返回 EAGIN
msgrcv函数:从消息队列中读取消息
#include
#include
#include
函数定义:int msgrcv( int msgid , struct msgbuf* msgp , int msgsz , long msgtyp, int msgflg);
参数:
msgbuf:结构体,定义如下:
struct msgbuf
{
long mtype ; //信息种类
char mtest[x];//信息内容 ,长度由msgsz指定
}
msgtyp: 信息类型。 取值如下:
msgtyp = 0 ,不分类型,直接返回消息队列中的第一项
msgtyp > 0 ,返回第一项 msgtyp与 msgbuf结构体中的mtype相同的信息
msgtyp <0 , 返回第一项 mtype小于等于msgtyp绝对值的信息
msgflg:取值如下:
IPC_NOWAIT ,不阻塞
IPC_NOERROR ,若信息长度超过参数msgsz,则截断信息而不报错。
返回值:成功时返回所获取信息的长度,失败返回-1,错误信息存于error
例:
msgA.c
#include
#include
#include
#include
#include
intmain()
{
//生成key
key_t key = ftok(".",1000);
//创建消息队列
intmsgid = msgget(key,IPC_CREAT|IPC_EXCL|0600);
if(msgid<0)perror("error"),exit(-1);
//发送消息
char*msg ="Hello world!";
if(msgsnd(msgid,msg,strlen(msg),0)<0)perror("error");
//删除消息队列
}
msgB.c
#include
#include
#include
#include
#include
intmain()
{
key_t key = ftok(".",1000);
intmsgid = msgget(key,0);
if(msgid<0)perror("error"),exit(-1);
charmsg[100]={};
if(msgrcv(msgid,msg,sizeof(msg),0,0)<0)perror("error");
printf("msg:%s\n",msg);
}