zoukankan      html  css  js  c++  java
  • mq_receive

    NAME

    mq_receive - 从消息队列中获取消息 (REALTIME)

    SYNOPSIS

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

      

    DESCRIPTION

    函数 mq_receive() 会mqdes 指定的消息队列中取出最高优先级中排队时间最久的消息.

    如果参数 msg_len 比消息队列的属性mq_msgsize 小, 函数会执行失败.

    函数执行成功后,选定的消息会拷贝到参数msg_ptr 指定的内存中并且从消息队列中删除.

    如果参数 msg_len 比 {SSIZE_MAX}大, 结果是由具体实现决定的.

    如果参数 msg_prio 不是NULL, 消息的优先级会存储到 msg_prio 指向的内存中.

    如果指定的消息队列是空的并且O_NONBLOCK没有被设置, 函数 mq_receive() 会阻塞到有消息排队或者函数 mq_receive() 被信号中断.

    如果指定的消息队列是空的,有多个线程在等待从这个消息队列中接受消息,并且系统支持优先级调度,那么优先级最高等待时间最长的线程会接受消息.否则,哪一个线程接受消息是未指定的.

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

    PARAMETERS

    mqdes

    【OUT】消息队列的描述符

    msg_ptr

    【IN】指向消息结构体的指针

    msg_len

    【OUT】消息的字节数, 不能小于 mq_msgsize

    msg_prio

    【IN】指向要保存消息优先级的内存

      

    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 指定的大小 小于消息队列的消息大小属性.

    [EBADMSG]

    检测到消息数据损坏.

    EXAMPLES

  • 相关阅读:
    springboot整合mybatis
    nginx
    mysql安装
    oracle安装静默
    网卡
    kafak部署
    在docker环境下安装activemq和rabbitmq
    docker安装
    【1213工作日志】ZYNQ的中断应用
    【CAN总线】CAN总线总结
  • 原文地址:https://www.cnblogs.com/LubinLew/p/POSIX-mq_receive.html
Copyright © 2011-2022 走看看