我不知道为什么我收到错误Message too long at mq_receive
。我查看了与我的问题类似的所有帖子,我已经尝试了他们所说的内容,但我仍无法解决问题。有人能帮帮我吗?
#include <stdio.h>
int main(int argc, char **argv) {
struct peticion pet;
struct respuesta res;
struct mq_attr attr1;
attr1.mq_msgsize = sizeof(pet);
attr1.mq_maxmsg = 10;
mqd_t cS = mq_open("/servidor", O_CREAT | O_RDONLY, 0700, attr1);
if (cS == -1) {
printf("ERROR: No se ha podido abrir la cola del servidor\n");
exit(-1);
}
while (1) {
if (mq_receive(cS, (char*)&pet, sizeof(pet), 0) == -1) {
printf("ERROR: El servidor no ha sido capaz de recibir peticiones\n");
exit(-1);
}
switch (pet.cod) {
case 0:
init(pet.colaCliente);
break;
case 1:
introducirPar(pet.key, pet.value, pet.colaCliente);
break;
case 2:
obtenerValor(pet.key, pet.colaCliente);
break;
case 3:
borrarPar(pet.key, pet.colaCliente);
break;
}
}
mq_close(cS);
mq_unlink((const char*)&cS);
return 0;
}
答案 0 :(得分:1)
问题是struct mq_attr应该作为指针传递给mq_open。由于某种原因,我不明白,compilar没有警告我。这解决了我的问题。因此解决方案是在mq_open中替换attr1
并使用&attr1
。
答案 1 :(得分:0)
在http://man7.org/linux/man-pages/man3/mq_receive.3.html
处引用手册页
EMSGSIZE
msg_len小于消息的mq_msgsize属性 队列中。
发布消息的过程传递的长度大于sizeof(pet)
。结构定义(您未发布)不匹配,或者消息有效内容属于不同类型。