(三)进程通信(五)-POSIX消息队列/共享内存

目录

34POSIX消息队列

POSIX消息队列相关函数

POSIX消息队列示例

35POSIX共享内存

POSIX共享内存相关函数

POSIX共享内存示例


 

34POSIX消息队列

posix消息队列的一个可能实现如下图:


POSIX消息队列相关函数

编译时候加上 -lrt 选项,即连接librt 库 (实时库)

#include <fcntl.h>           /* For O_* constants */
#include <sys/stat.h>        /* For mode constants */
#include <mqueue.h>

函数原型

mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);

函数功能

用来创建和访问一个消息队列

返回值

成功返回消息队列文件描述符;失败返回-1

参数说明

name: 某个消息队列的名字,必须以/打头,并且后续不能有其它/ ,形如/somename长度不能超过NAME_MAX(255)
oflag:与open函数类似,可以是O_RDONLY、O_WRONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_NONBLOCK;
mode:如果oflag指定了O_CREAT,需要设置mode。

 

函数原型

mqd_t mq_close(mqd_t mqdes);

函数功能

关闭消息队列

返回值

成功返回0;失败返回-1

参数说明

mqdes : 消息队列描述符

 

函数原型

mqd_t mq_unlink(const char *name);

函数功能

删除消息队列

返回值

成功返回0;失败返回-1

参数说明

消息队列的名字

 

函数原型

mqd_t mq_getattr(mqd_t mqdes, struct mq_attr *attr);
mqd_t mq_setattr(mqd_t mqdes, struct mq_attr *newattr, struct mq_attr *oldattr);

函数功能

获取/设置消息队列属性

返回值

成功返回0;失败返回-1

参数说明

  struct mq_attr {
               long mq_flags;       /* Flags: 0 or O_NONBLOCK */
               long mq_maxmsg;      /* Max. # of messages on queue */ 
               long mq_msgsize;     /* Max. message size (bytes) */
               long mq_curmsgs;     /* # of messages currently in queue */
           };

mq_flags 是标志;
mq_maxmsg 即一个消息队列消息个数上限;
mq_msgsize即一条消息的数据上限;
mq_curmsgs即当前消息个数

 

函数原型

mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);

函数功能

发送消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值