Я получаю исключение: file1.c: mq_send: сообщение слишком длинное
Ошибка кажется самоочевидной, но я не могу понять.
У меня есть структура и файлы:
typedef struct {
char path[5011];
char sharedMemSegmentNameBuf[30];
} messageQueueStruct;
файл1.с
#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);
}
файл2.с
#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[], и это сработало. Некоторые ссылки, которые я просмотрел:
https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/cs361/html/MessPassMQ.html
strncpy()
, прежде чем принять решение об его использовании, поскольку это не то, что ожидает большинство людей) - person Shawn   schedule 31.03.2019