msgrev

编辑:冰霜网互动百科 时间:2019-12-13 08:51:26
编辑 锁定
本词条缺少概述信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

msgrev函数格式格式

编辑
msgrev(msgqid,msgp,size,type,flag)

msgrev头文件

编辑
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>

msgrev函数功能

编辑
用msgrev函数系统调用从msqid消息队列中读取一条信息并将其放入消息段指针msgp指向的结构。msgsz大且msgflg&MSG_NOERROR为真,则按msgsz的大小截断而不通知调用进程,从消息队列中取得指定类型的消息

msgrev参数定义

编辑
int msgrev(msgqid,msgp,size,type,flag)
int msgqid,size,flag;
struct msgbuf *msgp;
long type;
其中msgqid,msgp,size,flag与msgsand中对应参数相似,type是规定要读的消息类型,flag规定尚若该队列无消息,核心应做的操作,如此时设置了IPC_NOWAIT标志,则立即返回,若flag中设置了MS_NOERROR,且所接收的消息 大于size,则核心截断所接收的消息。
对于msgrcv系统调用,核心必须完成下述工作
1、对消息队列的描述符和许可权等进行检查,若合法,就往下执行;否则返回。
2、根据type的不同分成三种情况处理:
type=0,接受该队列的第一个消息,并将它返回给调用者
type>0,接受类型type的第一个消息
type<0,接受小于等于type绝对值的最低类型的第一个消息
3、当所返回消息大小等于或小于用户的请求时,核心便将消息正文拷贝到用户区,并从消息队列中删除此消息,然后唤醒睡眠的发送进程,但如果消息长度比用户要求的大时,则做出错返回。

msgrev返回值

编辑
调用成功则返回值等于接受到实际消息的正文字节数,不成功则返回-1

msgrev说明

编辑
系统调用由msqid指定的消息队列中读取一个由msgtyp指定类型的消息到由msgo指向的缓冲区,通用的,该缓冲区的结构如前所诉,包括消息类型和消息正文,msgsz为可接受的消息正文的字节数,若接受到的消息正文的长度大于msgsz,则会被揭短到msgsz直接为止,(当消息标志msgflg&MSG_NOERROR为真时),截掉的部分将被丢失,而且不通知消息发送进程