POSIX消息队列

1.POSIX消息队列相关函数

1.1 mq_open函数

  • 功能,用来创建和访问一个消息队列
  • 原型
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);
//name:某个消息队列的名字,必须以/打头,并且后续不能有其它/,长度不超过NAME_MAX
//oflag:与open函数类似,可以是O_RDONLY、O_WRONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_NONBLOCK等
//mode:如果oflag指定了O_CREAT,需要设置mode
  • 返回值,成功返回消息队列文件描述符,失败返回-1

1.2 mq_close函数

  • 功能,关闭消息队列
  • 原型
mqd_t mq_close(mqd_t mqdes);
//mqdes:消息队列描述符
  • 返回值,成功返回0,失败返回-1

1.3 mq_unlink函数

  • 功能,删除消息队列
  • 原型
mqd_t mq_unlink(const char *name);
//name:消息队列名字
  • 返回值,成功返回0,失败返回-1

1.4 mq_getattr/mq_set_attr函数

  • 功能,获取、设置消息队列属性
  • 原型
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

1.5 mq_send函数

  • 功能,发送消息至消息队列
  • 原型
mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);
//mqdes:消息队列描述符
//msg_ptr:指向消息的指针
//msg_len:消息长度
//msg_prio:消息优先级
  • 返回值,成功返回0,失败返回-1

1.6 mq_receive函数

  • 功能,从消息队列获取消息
  • 原型
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);
//mqdes:消息队列描述符
//msg_ptr:返回接收到的消息指针
//msg_len:消息长度,通过attr获取
//msg_prio:返回接收到的消息优先级
  • 返回值,成功返回接收到的消息字节数,失败返回-1
  • 注意,返回指定消息队列中最高优先级、最早的消息

1.7 mq_notify函数

  • 功能,建立或者删除消息到达通知事件
  • 原型
mqd_t mq_notify(mqd_t mqdes, const struct sigevent *notification);
//mqdes:消息队列描述符
//notification:非空表示当消息到达且消息队列先前为空,那么将得到通知,NULL表示撤销已注册的通知

在这里插入图片描述

  • 返回值,成功返回0,失败返回-1
  • 通知方式,产生一个信号,或创建一个线程执行一个指定的函数
  • 注意
    任何时刻只能有一个进程可以被注册为接收某个给定队列的通知;
    当有一个消息到达某个先前为空的队列,而且已有一个进程被注册为接收该队列的通知时,只有没有任何线程阻塞在该队列的mq_receive调用的前提下,通知才会发出;
    当通知被发送给它的注册进程时,其注册被撤销。进程必须再次调用mq_notify以重新注册(如果需要的话),重新注册要放在从消息队列读出消息之前而不是之后。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值