学习Posix消息队列的时候想修改一下收发消息的大小但是好像设置不成功,希望大伙帮忙解决一下谢谢啦。
下面是我的代码
#include <stdio.h>
#include <mqueue.h>
#define TESTMQ "/test_mq"
int main()
{
struct mq_attr attr;
attr.mq_msgsize = 1024;
attr.mq_maxmsg = 20;
printf("attr mq_flags is %ld\n",attr.mq_flags);
printf("attr mq_maxmsg is %ld\n",attr.mq_maxmsg);
printf("attr mq_msgsize is %ld\n",attr.mq_msgsize);
printf("attr mq_curmsgs is %ld\n",attr.mq_curmsgs);
mqd_t mq_id;
mq_id = mq_open(TESTMQ, O_RDWR | O_CREAT, 0666, &attr);
if (mq_id < 0)
perror("open error!\n");
struct mq_attr get_attr;
int ret = mq_getattr(mq_id,&get_attr);
printf("get_attr mq_flags is %ld\n",get_attr.mq_flags);
printf("get_attr mq_maxmsg is %ld\n",get_attr.mq_maxmsg);
printf("get_attr mq_msgsize is %ld\n",get_attr.mq_msgsize);
printf("get_attr mq_curmsgs is %ld\n",get_attr.mq_curmsgs);
mq_close(mq_id);
return 0;
}
以下是我的运行结果
attr mq_flags is 0
attr mq_maxmsg is 20
attr mq_msgsize is 1024
attr mq_curmsgs is 0
get_attr mq_flags is 0
get_attr mq_maxmsg is 10
get_attr mq_msgsize is 8192
get_attr mq_curmsgs is 0
很明显mq_open函数的第四个参数没有起到应有的作用,msgsize和maxmsg两个参数都没有被修改。
但是我看别人的历程教学啥的好像都是这么个流程啊 ,是我哪里操作错了吗?
希望大伙能帮忙看看解答一下,看看我的问题在哪或者怎样才能修改消息队列中的mq_msgsize和mq_maxmsg这两个参数。
这个不是配置固定的?