POSIX消息队列 - 打开时出错:参数无效

时间:2012-12-18 09:05:34

标签: c linux qt message-queue

我在linux上创建消息队列时遇到了麻烦。我得到的错误是“无效的参数”。我要做的另一件事是代码是Qt项目的一部分。

常见的错误是名称不以(/)开头且arg的数量不正确,但我检查了那些!

这是我正在尝试运行的代码:

#define MQ_TEST_PATH            "/test_queue"
#define MQ_MAX_MSG_SIZE         256
#define MQ_MAX_MSG_COUNT        20

struct mq_attr mqAttr;
mqAttr.mq_maxmsg = MQ_MAX_MSG_COUNT;
mqAttr.mq_msgsize = MQ_MAX_MSG_SIZE;

mq_unlink(MQ_TEST_PATH);

mode_t mode =  S_IRUSR | S_IWUSR;
int oflags = O_WRONLY | O_CREAT | O_EXCL;

mqd_t mqd;
mqd = mq_open(MQ_TEST_PATH, oflags, mode, &mqAttr);

if(mqd < 0){
    perror("Error on open");
    qDebug()<<mqd;
    return 0;
}

mq_close(mqd);
mq_unlink(MQ_TEST_PATH);

输出:

Error on open: Invalid argument
-1 

1 个答案:

答案 0 :(得分:8)

man mq_open

  EINVAL中指定了

O_CREAT oflag,而attr不是NULL,但attr->mq_maxmsgattr->mq_msqsize无效。这两个字段都必须大于零。在没有特权的流程中(没有CAP_SYS_RESOURCE功能),attr->mq_maxmsg必须小于或等于msg_max限制

man mq_overview

&GT;     的/ proc / SYS / FS / mqueue中/ msg_max

  

msg_max的默认值为10.