Я получаю исключение: file1.c: mq_send: сообщение слишком длинное
Ошибка кажется очевидной, но я не могу ее понять.
У меня есть структура и файлы:
typedef struct {
char path[5011];
char sharedMemSegmentNameBuf[30];
} messageQueueStruct;
file1.c
#include <sys/mman.h>
#define MAX_CACHE_REQUEST_LEN 5041
messageQueueStruct mqStruct;
int maxPathLength = MAX_CACHE_REQUEST_LEN - sizeof(mqStruct.sharedMemSegmentNameBuf);
strncpy(mqStruct.path, path, maxPathLength);
strncpy(mqStruct.sharedMemSegmentNameBuf, sharedMemSegmentNameBuf, sizeof(mqStruct.sharedMemSegmentNameBuf));
if (mq_send(qdCache, (const char *) &mqStruct, sizeof(mqStruct), 0) == -1)
{
perror("handle_with_cache: mq_send");
exit(1);
}
file2.c
#include <sys/mman.h>
#define MAX_CACHE_REQUEST_LEN 5041
struct mq_attr attributes;
attributes.mq_maxmsg = MAX_MESSAGES;
attributes.mq_msgsize = MAX_CACHE_REQUEST_LEN;
messageQueueStruct receiveStruct;
int maxPathLength = MAX_CACHE_REQUEST_LEN - sizeof(receiveStruct.sharedMemSegmentNameBuf);
messageQueueStruct receiveStruct;
if (mq_receive(qdCache, (char *) &receiveStruct, MAX_CACHE_REQUEST_LEN, NULL) == -1)
{
perror("process request: mq_receive");
exit(1);
}
Это выглядит мнечто размеры совпадают на стороне приема / отправки.Я также протестировал только с буфером char [], и это сработало.Некоторые ссылки, на которые я смотрел:
отправка структуры в mq_send
https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/cs361/html/MessPassMQ.html