msgrev && msgsend && 类型

int  msgget(key_t key, int msgflg)

函数功能:在内核中开辟一块消息队列空间,返回值返回该消息队列空间对应的msqid,msqid用来操作该空间

形参列表:

key:内核层中分配空间的索引

0/IPC_PRIVATE :分配一块私有的消息队列空间(系统随机分配)

key值 根据key值分配一块指定的消息队列空间

msgflg:对消息队列空间的操作方式/权限

IPC_CREAT :创建消息队列 (如果key=0,不需要IPC_CREAT也能创建空间)

IPC_EXCL :空间检测 (检测消息队列空间是否存在)

<如果消息队列已存在,跳过创建,直接使用>

一般用法:IPC_CREAT | 0764

返回值:

成功:创建的消息队列对应的msqid --> 操作消息队列空间必须使用msqid

失败:-1

 

key值作为内核层分配空间的索引,每一个key值对应一块固定的空间。key值不变,空间固定!

key值类似于注册码,是一串很大的整型数据。

它是通过一个文件名和一个整型数据结合生成的! 文件名和整型数据都没有意义,仅仅是生成key值的基数!

key值生成的函数: ftok();

key_t  ftok(const char *pathname, int proj_id);

函数功能:利用pathname和proj_id合成一个key值。返回值返回

形参列表:

pathname:文件名 (存在)

proj_id:整型数据

返回值:

成功:生成的key值

失败:-1

 

int  msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

函数功能:往消息队列中发送消息

形参列表:

msqid:消息队列空间的操作节点 --> 指向要操作的消息队列空间

msgp:消息结构体指针 --> 指向要发送的消息

            struct s_msg{ /*msgp定义的参照格式*/
                                  long type; /* 必须大于0,消息类型 */
                                  char mtext[256]; /*消息正文,可以是其他任何类型*/
                                 } msgp;

msgsz:消息内容的长度 --> 消息正文长度 (实际发送的消息内容长度)

msgflg:对消息队列空间的操作方式

IPC_NOWAIT:非阻塞的发送

0:阻塞发送 (正常模式)

返回值:

成功:0

失败:-1

 

ssize_t  msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)

函数功能:从消息队列中接收一条消息

形参列表:

msqid:消息队列msqid --> 指向要操作的消息队列空间

msgp:结构体指针 --> 指向存放接收到的消息的缓存区

msgsz:最多接收多少个字节的消息内容

msgtyp:接收消息的类型 (指定能够接收什么类型的消息)

< 0 :接收在msgtyp绝对值范围内的最小的消息类型的第一个消息

= 0 :接收消息队列中第一个消息 (任何类型)

> 0 :接收msgtyp类型的第一个消息  对应msgsnd中的msgp.type 。

msgflg:对消息队列空间的操作方式

0:阻塞接收、接收指定类型的消息、消息长度大于能接收上限,消息不接收,返回错误码

IPC_NOWAIT:非阻塞的接收

MSG_EXCEPT:接收消息队列中除了msgtyp类型之外的任何类型的第一个消息

(必须msgtyp>0,才能使用该宏)

MSG_NOERROR:如果消息长度大于能接收消息的最大长度,接收能接收的前面部分,后面部分丢弃

返回值:

成功:实际接收的消息内容字节数

失败:-1

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值