Linux消息队列关闭的函数是,Linux下消息队列的简单函数介绍

本文介绍了如何使用msgsnd和msgrcv函数在C语言中实现进程间的消息队列通信。首先,通过ftok生成key,然后使用msgget创建消息队列。接着,使用msgsnd发送消息到消息队列,并使用msgrcv从队列中读取消息。msgbuf结构体包含了消息类型和内容,msgflg参数可以设置为IPC_NOWAIT等选项来控制消息的发送和接收行为。
摘要由CSDN通过智能技术生成

函数原型: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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值