本文共 943 字,大约阅读时间需要 3 分钟。
5.int mq_send(mqd_t mqdes,const char *ptr,size_t len,unsigned int prio);
int mq_receive(mqd_t mqdes,char *ptr,size_t len,unsigned int *priop);
mq_send函数往消息队列中写入消息,mq_receive函数从消息队列中读出消息。
6.int mq_notify(mqd_t mqdes,const struct sigevent *motification);
结构体:
union sigval{
int sival_int;
void *sival_ptr;
};
struct sigevent
{
int sigev_notify;
int sigev_signo;
union sigval sigev_value;
void (*sigev_notify_function)(union sigval);
pthread_attr_t *sigev_notify_attributes;
};
mq_notify函数为指定队列建立或删除异步事件通知。一些普遍适用于该函数的若干规则
1).如果notification参数非空,那么当前进程希望在一个消息达到所指定的先前为空的队列时得到通知。我们说"该进程被注册为接收该队列的通知"。
2).如果notification参数为空指针,而且当前进程目前被注册为接收所指定队列的通知,那么已存在的注册将被撤销。
3).任意时刻只有一个进程可以被注册为接收某个给定队列的通知。
4).当有一个消息达到某个先前为空的队列,而且已有一个进程被注册为接收该队列的通知时,只有在没有任何线程阻塞在该队列的mq_receive调用中的前提下,通知才会发出。这就是说,在mq_receive调用中的阻塞比任何通知的注册都优先。
5).当该通知被发送给它的注册进程时,其注册即被撤销。该进程必须再次调用mq_notify以重新注册(想要的话)。
参考:Unix进程间通信
posted on 2011-07-07 02:29 周强 阅读(2794) 评论(3) 编辑 收藏 引用 所属分类: linux
转载地址:http://gmnuo.baihongyu.com/