在本章中,我们将学习:
1.简介
2. API’在POSIX Message Queue中使用
3. POSIX消息队列示例
介绍:
在上一章中,我们了解了System V消息队列。在本章中,我们将学习POSIX消息队列
您应该在标题下面包含以使用Message Queue:
#包括<mqueue.h>
以下是使用Message Queue的API:
1. mq_open()
mqd_t mq_open(const char * name,int oflag,… )
它将使用“name”并返回消息队列描述符。
2. mq_close()
int mq_close(mqd_t mqdes);
它将关闭消息队列描述符和消息队列之间的关联。
3. mq_send()
int mq_send(mqd_t mqdes,const char * msg_ptr,size_t msg_len,unsigned int msg_prio);
它用于发送由指向的消息“msg_ptr” with the length “msg_len”进入消息队列。
您也可以通过填写“msg_prio”.
4. mq_receive()
int mq_receive(mqd_t mqdes,char * msg_ptr,size_t msg_len,unsigned int * msg_prio);
它被起诉以接收来自消息队列的消息,
5. mq_setattr()
int mq_setattr(mqd_t mqdes,const struct mq_attr * mqstat,struct mq_attr * omqstat);
它用于设置结构mqstat的mq_flags。
6. mq_getattr()
int mq_getattr(mqd_t mqdes,结构mq_attr * mqstat);
它用于获取消息队列描述符mqdes引用的队列的属性。
7. mq_notify()
int mq_notify(mqd_t mqdes,const struct sigevent * notification);
当队列变为非空时,它将通知调用过程。
8. mq_unlink()
int mq_unlink(const char * name);
用于删除消息队列
消息队列示例:
#包括<stdio.h> #include <stdlib.h> #include <mqueue.h> #define MAX_MSG_SIZE 4096 #define MAX_MSGS 2 int main( void ) { //create and send a message queue mqd_t mqdSend = mq_open ("/OpenCSF_MQ", O_CREAT | O_EXCL | O_WRONLY, 0600, NULL); mq_send (mqdSend, "HELLO", 6, 10); mq_close (mqdSend); //open a message queue for reading mqd_t mqd = mq_open ("/OpenCSF_MQ", O_RDONLY); struct mq_attr attr; char *buffer = calloc (attr.mq_msgsize, 1); //retrieve the message from message queue int priority = 0; if ((mq_receive (mqd, buffer, attr.mq_msgsize, &priority)) == -1) printf ("Failed to receive message\n"); else printf ("Received [priority %u]: '%s'\n", priority, buffer); //cleanup free (buffer); buffer = NULL; mq_close (mqd); }
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |