Как получить данные динамической длины из очереди сообщений?
Я должен отправлять и получать динамические данные, используя очередь сообщений SysV для университетского проекта.
Длина данных передается в отдельном сообщении,size
уже известен.
И вот как я пытаюсь получить данные. Я должен признать, что я не специалист по C ++, особенно когда речь идет о распределении памяти.
struct {
long mtype;
char *mdata;
} msg;
msg.mdata = (char *)malloc(size * sizeof(char));
msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0);
The problem seems to be the malloc
call, but I don't know how to do this right.
EDIT
То, что я пытаюсь, это иметь какое-тоread метод в OO-оболочке вокруг очередей сообщений. Я хотел бы прочитать данные из очереди сообщений вchar[]
илиstd::string
, То, что у меня сейчас выглядит (упрощенно), вот так.
bool Wrapper::read(char *data, int length)
{
struct Message {
long mtype;
std::string mdata;
};
Message msg;
msg.mdata = std::string(size, '\0');
if(msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0) < 0)
{
return false;
}
memcpy(data, msg.mdata.c_str(), msg.mdata.size());
return true;
}
Все, что я получаю, это ошибки сегментации или полностью поврежденные данные (хотя эти данные иногда содержат то, что я хочу).