http://hi.baidu.com/gaomanyi/blog/item/5a0be53620ef46380b55a955.html
POSIX消息隊列可以認為是一個連結清單。有足夠寫權限的線程都可以往隊列中放置消息, 有足夠讀權限的線程都可以從隊列中取走消息, 每個消息是一個記錄, 它由發送者賦予一個優先級。在某個程序往一個隊列寫入消息之前, 并不需要另外某個程序在該隊列上等待消息的到達。
一個程序可以往某個 隊列寫入一些消息後終止, 讓另外一個程序在某個時刻讀出這些消息。我們說消息隊列具有随核心的持續性。
列舉函數和接口如下:
#include<mqueue.h>
mqd_t mq_open(const char *name,int oflag,...);
int mq_close(mqd_t mqdes);
int mq_unlink(const char *name);
int mq_getattr(mqd_t mqdes,struvt mq_attr *attr);
int mq_setattr(mqd_t mqdes,const struct mq_attr *attr,struct mq_attr *attr);
int mq_send(mqd_t mqdes,const char *ptr,size_t len,unsigned int prio);
ssize_t mq_receive(mqd_t mqdes,char *ptr,size_t len,unsigned int *priop);
int mq_notify(mqd_t mqdes,const struct sigevent *notification);//異步通知消息到達:産生一個信号,或建立一個線程執行一個指定的函數
struct mq_attr{
long mq_flags;
long mq_maxmsg;
long mq_msgsize;
long mq_curmsgs;
};
union sigval {
int sival_int;
void *sival_ptr;
};
struct sigevent{
int sigev_notify;
int sigev_sigev_signo;
union sigval sigev_value;
void (*sigev_notify_function)(union sigval);
pthread_attr_t *sigev_notify_attributes;
};