类似于其它IPC对象,如共享内存、信号量等,Linux也为应用程序提供了两种消息队列API:POSIX消息队列API和System V消息队列API。下面分别介绍。
POSIX消息队列
类似于POSIX的共享内存对象会以tmpfs挂载到/dev/shm,POSIX的消息队列对象也会以mqueue文件系统类型节点挂在到/dev/mqueue。POSIX消息队列对象同样具有内核持久性,即如果应用程序没有删除它,那即便应用程序退出了他依然存在。
POSIX消息队列的相关API如下。
#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);
int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
int mq_setattr(mqd_t mqdes, const struct mq_attr *newattr,
struct mq_attr *oldattr);
int mq_send(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned int msg_prio);
int mq_timedsend(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned int msg_prio,
const struct timespec *abs_timeout);
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned int *msg_prio);
ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned int *msg_prio,
const struct timespec *abs_timeout);
int mq_close(mqd_t mqdes);
int mq_unlink(const char *name);
POSIX消息队列API的基本使用如下: