Estoy implementando una comunicación entre 2 procesos utilizando una cola. El problema es que cuando llamo a la función mq_receive, obtengo este error: Mensaje demasiado largo.mq_receive: message too long
he hecho lo siguiente:
struct mq_attr attr;
long size = attr.mq_msgsize;
.... // initializing the queue "/gateway"
int rc = mq_receive(gateway, buffer, size, &prio);
Si puedo imprimir el valor del tamaño, me sale size = 1, mientras que al imprimir el mismo tamaño pero de otro programa (conseguido por el mismo mecanismo), I conseguir algo no entero largo (-1217186280) ...
¿Cómo puedo solucionar este error? .... así que mientras size = 1, creo que es correcto decir "mensaje demasiado largo" pero ¿por qué es 1?
P.S. También he intentado poner:
int rc = mq_receive(gateway, buffer, sizeof(buffer), &prio);
pero sin resultado.
¿Está llamando a mq_getattr() allí para obtener el tamaño real? De lo contrario, está haciendo referencia a cualquier basura que esté en la memoria en la ubicación de la estructura. – Duck
Publica el código donde creas la cola e intenta leer de ella. – Duck