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);
1.2 mq_close函数
mqd_t mq_close(mqd_t mqdes);
1.3 mq_unlink函数
mqd_t mq_unlink(const char *name);
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);
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/68f69013b3f73c8dc2abe5f04aae70ad.png#pic_center)
1.5 mq_send函数
mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);
1.6 mq_receive函数
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);
- 返回值,成功返回接收到的消息字节数,失败返回-1
- 注意,返回指定消息队列中最高优先级、最早的消息
1.7 mq_notify函数
mqd_t mq_notify(mqd_t mqdes, const struct sigevent *notification);
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b008c6041b36043fe402be2e5959370a.png#pic_center)
- 返回值,成功返回0,失败返回-1
- 通知方式,产生一个信号,或创建一个线程执行一个指定的函数
- 注意
任何时刻只能有一个进程可以被注册为接收某个给定队列的通知;
当有一个消息到达某个先前为空的队列,而且已有一个进程被注册为接收该队列的通知时,只有没有任何线程阻塞在该队列的mq_receive调用的前提下,通知才会发出;
当通知被发送给它的注册进程时,其注册被撤销。进程必须再次调用mq_notify以重新注册(如果需要的话),重新注册要放在从消息队列读出消息之前而不是之后。