当前位置: 首页 > 工具软件 > Open-MQ > 使用案例 >

linux mq open,linux mq_open忽略mq_msgsize属性

微生昌勋
2023-12-01

所有的,过去认为我是理智的,现在不太确定。

我想创建一个消息队列,其mq_msgsize属性不是8192,这似乎是默认值。我在下面附上我的代码 - 它有一些printf显示值。如果你能指出我做错了什么,我会永远感激。linux mq_open忽略mq_msgsize属性

bool Subscriber::Subscribe(void)

{

mqd_t qid;

bool brv = false;

msg_topic_t topic = this->GetTopic();

struct mq_attr q_attr;

int rv = 0;

if (VALID_TOPIC(topic))

{

if (this->GetName().length() > 0)

{

string qnamestr = this->GetName();

if (qnamestr[0] != '/')

{

qnamestr = "/" + qnamestr;

this->SetName(qnamestr);

}

const char * qname = (const char *) qnamestr.c_str();

q_attr.mq_msgsize = 256;

q_attr.mq_curmsgs = 0;

q_attr.mq_flags = O_NONBLOCK;

q_attr.mq_maxmsg = 10;

qid = mq_open(qname, O_RDONLY|O_CREAT, 0644, &q_attr);

if ((mqd_t) -1 != qid)

{

rv = mq_getattr(qid, &q_attr);

if (rv != 0)

{ perror(" get_attr1 failed: "); }

printf(" queue size is now: %d\n", q_attr.mq_msgsize);

if (q_attr.mq_msgsize > 1024)

{

struct mq_attr old_attr;

q_attr.mq_msgsize = 1024;

rv = mq_setattr(qid, &q_attr, &old_attr);

if (rv != 0)

{ perror(" could not update message size: "); }

rv = mq_getattr(qid, &q_attr);

if (rv != 0)

{ perror(" get_attr2 failed: "); }

printf(" queue size is now: %d\n", q_attr.mq_msgsize);

}

this->SetOutboxID(qid);

brv = true;

DLOG(INFO) << " qid = " << qid << endl;

MessageCenter * mc = MessageCenter::GetInstance();

mc->AddSubscriber((Subscriber *) this);

}

}

}

drain_queue(this->GetOutboxID());

return(brv);

}

输出看起来是这样的:现在 队列大小是:现在8192 队列大小是:现在8192 队列大小为:8192

谢谢!

+0

建议您通过检查返回值和错误代码来查找线索,然后*寻求帮助。当你忽略函数的返回值时,你会注意到任何人会告诉你的东西并不是显而易见的。 –

+0

好点。我会去做。谢谢。 –

+0

不客气。即,当然,我的意思是'mq_ *'家庭功能。 –

 类似资料: