函数msgsnd()及函数msgrcv()参数详解

 

         最近看system V消息队列,在看到msgsnd()这个函数时,发现了一个错误。(注:我看的是UNIX网络编程卷二:进程间通信 第二版)

msgsnd()函数:追加一条新消息到消息队列的系统调用语法:
#include <sys.msg.h>
int msgsnd(int  msqid, const  void   *ptr, size_t    length, int   flag);
msqid: 由消息队列的标识符
ptr: 消息缓冲区指针。
消息缓冲区结构为:
struct msgbuf {
long mtype;
char mtext[1];
};
这个结构体我们可以自己定义,书中举例:
#define MY_DATA 8
typedef struct my_msfbuf
{
long  mtype;
int16_t mshort ;
char mchar[MY_DATA];
}Message;
        msgbuf结构体我们可以自己定义,但必须要有一个消息类型type,我们也可以定义成下面这样
struct mymesg
{
long type;
struct mymessage
{
 int len;
char data[SIZE];
};
};
legth: 消息数据的长度
flag: 为0表示阻塞方式,设置IPC_NOWAIT 表示非阻塞方式
msgsnd 调用成功返回0,不成功返回-1。
msgrcv()函数:从消息队列中读出一条新消息
#include <sys.msg.h>
int msgrcv(int msqid, void  *ptr, size_t  length, long  type, int  flag);
msqid: 由消息队列的标识符
ptr :消息缓冲区指针。消息缓冲区结构为:
struct msgbuf {
long mtype;
char mtext[1];

length: 消息数据的长度
type: 决定从队列中返回哪条消息:
=0 返回消息队列中第一条消息
>0 返回消息队列中等于mtype 类型的第一条消息。
<0 返回mtype<=type 绝对值最小值的第一条消息。
msgflg 为0表示阻塞方式,设置IPC_NOWAIT 表示非阻塞方式
msgrcv 调用成功返回0,不成功返回-1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值