zoukankan      html  css  js  c++  java
  • mq_send

    NAME

    mq_send - 将消息发送到消息队列 (REALTIME)

    SYNOPSIS

    #include <mqueue.h>
    int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,unsigned msg_prio);

    DESCRIPTION

    函数 mq_send() 会将参数 msg_ptr 指向的内容发送给参数mqdes 指向的消息队列.

    参数 msg_len 指定消息的大小(用字节数表示). 参数 msg_len 的值应该不大于消息队列的属性 mq_msgsize 的值, 否则函数执行失败.

    如果指定的消息队列不为空, mq_send() 的操作类似将消息插入在消息队列的指定位置,指定位置是通过参数 msg_prio 来指定.

    参数 msg_prio 值大的消息会被插入在参数 msg_prio值小的消息前;如果值相等,则插在后面. 参数 msg_prio 的值应该小于 {MQ_PRIO_MAX}.

    如果指定的消息队列满了并且 O_NONBLOCK(mq_open中设置) 未被设置, 函数mq_send() 会阻塞, 一直到消息可以被插入队列或者函数 mq_send() 被信号中断.

    如果有几个线程都在等待消息队列的空闲资源向, 在支持优先级调度的系统中, 优先级最高的线程先解除阻塞,如果优先级相同则等待时间最长的线程先解除阻塞;

    不支持优先级调度的系统中, 哪一个等待线程解除阻塞是未说明的.

    如果指定的消息队列满了并且 O_NONBLOCK被设置了,函数 mq_send() 会失败返回.

    PARAMETERS

    mqdes

    消息队列的描述符

    msg_ptr

    指向消息结构体的指针

    msg_len

    消息的字节数, 不能大于 mq_msgsize

    msg_prio

    消息的优先级,

    优先级大的消息会插队在优先级小的消息前面;

    同优先级的消息会插队在后面(时间先后).

    RETURN VALUE

    如果函数执行成功, 函数返回0

    如果函数执行失败,函数返回 -1 并且设置errno,errno的种别详见下面的ERRORS一节.

    ERRORS

    [EAGAIN]

    O_NONBLOCK标志被设置并且消息队列已满.

    [EBADF]

    参数 mqdes 不是有效的消息队列描述符.

    [EINTR]

    函数被信号中断.

    [EINVAL]

    函数已阻塞并且参数 abs_timeout 无效(无效是因为 tv_sec 小于0或者 tv_nsec 小于0或者 tv_nsec大于 10亿(1000 million).

    [EMSGSIZE]

    参数 msg_len 指定的大小超过了消息队列的消息大小属性.

    EXAMPLES

  • 相关阅读:
    让ASP.NET MVC页面返回不同类型的内容
    在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)
    BrnMall多店版网上商城正式发布
    Brn系列网上商城发布指南
    CSS和SVG中的剪切——clip-path属性和<clipPath>元素
    C#实现调用Java类中方法
    WCF 第五章 会话级别的实例
    细说 ASP.NET Cache 及其高级用法
    C#使用SOAP调用Web Service
    JAVA与.NET的相互调用——利用JNBridge桥接模式实现远程通讯
  • 原文地址:https://www.cnblogs.com/LubinLew/p/POSIX-mq_send.html
Copyright © 2011-2022 走看看