上海企业建站推荐,建设局招标办网站,国外手机网站欣赏,许昌做网站团队一、函数 mq_open 头文件 mqueue.h#xff1b; 原型 mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struct mq_attr* attr*/); 函数功能 创建消息队列#xff1b; 参数 name #xff1a;消息队列的名字#xff0c;根据消息队列的规则#xff0c;为了更好的…一、函数 mq_open 头文件 mqueue.h 原型 mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struct mq_attr* attr*/); 函数功能 创建消息队列 参数 name 消息队列的名字根据消息队列的规则为了更好的可移植性该名字必须以‘’开头创建一个消息队列的时候无须路径给出名字就好其存放位置可有自己指定(创建前后都可以)。 oflagO_RDONLY只读 O_WRONLY只写 O_RDWR可读可写O_CREAT创建 O_EXCL 当消息已存在时返回EEXIST错误到errno中O_NONBLOCK设置非阻塞 mode在oflag中指定O_CREAT时此参数是需要的。表示创建消息队列的权限S_IRUSR,S_IWUSR,S_IXUSR,S_IRGRP,S_IWGRP,S_IXGRP,S_IROTH,S_IWOTH,S_IXOTH相或组成或者写成0777(表示rwxrwxrwx)等用八进制表示也可以。 attr在oflag中指定O_CREAT时此参数是需要的。存放消息队列的属性。其中mq_flags为0表示阻塞为O_NONBLOCK为非阻塞。 (这里可以填写哪些参数具体看二、Posix IPC) 返回值 若创建成功则返回消息队列的描述符否则返回1。 mq_close函数 头文件 mqueue.h 原型 int mq_close(mqd_t mqdes); 函数功能 关闭已打开的消息队列关闭后调用进程不可以再使用该描述符但其消息队列并没有被删除。一个进程终止时它的所有打开着的消息队列都关闭就像调用了mq_close一样。 参数 mqdes 消息队列的描述符即消息队列创建成功后的返回值。 返回值 成功返回0失败返回-1。 mq_unlink 头文件 mqueue.h 原型 int mq_unlink(const char *name); 函数功能 从系统中删除名为name的消息队列但删除的只是我们可以在系统中看见的文件的名字但文件本身并没有被从磁盘上删除除非该名称是文件的最后一个链接并且该文件已关闭才会将该文件真正从磁盘上删除。即如果某前该详细队列的文件还在其他进程中打开那么不会将其从磁盘上删除又或者这是最后一个链接但它还为关闭即未执行ma_close操作或打开它的进程为结束就执行mq_unlink它也不会从磁盘上删除。 参数 name消息队列的名称以‘’开始。 返回值 成功返回0出错返回1。 mq_getattr 头文件 mqueue.h 原型 int mq_getattr(mqd_t mqdes, struct mq_attr *attr); 函数功能 获取mqdes指的消息队列的属性存放到attr结构体中。 struct mq_attr { long int mq_flags; /* Message queue flags0O_NONBLOCK */ long int mq_maxmsg; /* Maximum number of messages. */ long int mq_msgsize; /* Maximum message size. */ long int mq_curmsgs; /* Number of messages currently queued. */ long int __pad[4]; }; 参数 mqdes为消息队列描述符attr为上面解释的存放消息队列属性的结构体。 返回值 成功返回0失败返回1。 mq_setattr 头文件 mqueue.h 原型 int mq_setattr(mqd_t mqdes, const struct mq_attr *attr, struct mq_attr *oattr); 函数功能 设置消息队列的属性但是只使用attr结构体中的mq_flags属性以设置(O_NONBLOCK)或清除(0)非阻塞标志。该结构体的另外三个属性被忽略每个队列的最大消息数和每个消息的最大字节数都只能在创建时设置当前队列中的消息数是随传送消息和读取消息的操作改变的只能读取不能设置。如果oattr非空那么指定队列的先前属性(4个)全将返回到由该指针指向的结构体中。 参数 mqdes 消息队列的属性 attr 函数功能解释中 oattr 函数功能解释中 返回值 成功返回0失败返回1。 mq_send 头文件 mqueue.h 原型 int mq_send(mqd_t mqdes, const char *ptr, size_t len, unsigned int prio); 函数功能 给描述符mqdes指向的消息队列发送消息大小为len内容存放在ptr中prio为优先级。 参数 mqdes为要发送消息的消息队列描述符; ptr为要发送的数据; len为消息的长度; prio为消息的优先级; 返回值 成功返回0失败返回1。 mq_receive 头文件 mqueue.h 原型 ssize_t mq_receive(mqd_t mqdes, char *ptr, size_t len, unsigned int *proip); 函数功能 从描述符mqdes指向的消息队列中读取消息存放ptr中。 参数 mqdes为要从中读取消息的消息队列的描述符; ptr为存放接受到的消息的指针; len为接受的最大长度; 该值不能小于能加到该消息对列上的最大大小如果len小于该值就立即返回EMSGSIZE错误。 返回值 成功返回读取消息的内容的字节数出错返回1。 mq_notify 头文件 mqueue.h; signal.h; 原型 int mq_notify(mqd_t mqdes, const struct sigevent *notification); 函数功能 为指定队列建立或删除异步事件通知。 参数 在signal.h中 typedef union sigval { int sival_int; void __user *sival_ptr; } sigval_t; typedef struct sigevent { sigval_t sigev_value; int sigev_signo; int sigev_notify; void (*sigev_notify_function)(union sigval); Pthread_attr_t *sigev_notify_attributes; } sigevent_t; (1).如果notification参数非空那么当前进程希望在有一个消息到达所指定的先前为空的队列时得到通知。我们说“该进程被注册为接收该队列的通知”。 (2).如果notification参数为空指针而且当前进程目前被注册为接收所指定队列的通知那么已存在的注册将被撤销。 (3).任意时刻只有一个进程可以被注册为接收某个指定队列的通知。 (4).当有一个消息到达某个先前为空的队列而且已有一个进程被注册为接收该队列的通知时只有在没有任何线程阻塞在该队列的mq_receive调用中的前提下通知才会发出。这就是说在mq_receive调用中的阻塞比任何通知的注册都优先。 (5).当该通知被发送给它的注册进程时其注册即被撤销。该进程必须再次调用mq_notify重新注册(如果想要的话)。 返回值 成功返回0失败返回1。转载于:https://www.cnblogs.com/caiguoqing/p/4963264.html