Dim*_*kov 5 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);
Run Code Online (Sandbox Code Playgroud)
输出:
Error on open: Invalid argument
-1
Run Code Online (Sandbox Code Playgroud)
小智 9
男子mq_open
EINVALO_CREAT是指定的oflag,attr不是NULL,但是attr->mq_maxmsg或是attr->mq_msqsize无效的.这两个字段都必须大于零.在没有特权的过程中(没有CAP_SYS_RESOURCE能力),attr->mq_maxmsg必须小于或等于msg_max限制
男子mq_overview
>/proc/sys/fs/mqueue/msg_max
msg_max的默认值为10.