Jak odbierać dane o długości dynamicznej z kolejki wiadomości?
Muszę wysyłać i odbierać dynamiczne dane za pomocą kolejki komunikatów SysV dla projektu uniwersyteckiego.
Długość danych jest przesyłana w osobnej wiadomości,size
jest już znany.
I tak staram się odbierać dane. Muszę przyznać, że nie jestem specjalistą od C ++, zwłaszcza jeśli chodzi o alokację pamięci.
struct {
long mtype;
char *mdata;
} msg;
msg.mdata = (char *)malloc(size * sizeof(char));
msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0);
Problem wydaje się byćmalloc
zadzwoń, ale nie wiem, jak to zrobić dobrze.
EDYTOWAĆ
Próbuję mieć coś w rodzajuczytać metoda w opakowaniu OO wokół kolejek komunikatów. Chciałbym odczytać dane z kolejki wiadomości dochar[]
lub astd::string
. To, co mam teraz, wygląda (uproszczone) w ten sposób.
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;
}
Wszystko, co dostaję, to błędy segmentacji lub całkowicie uszkodzone dane (chociaż dane te czasami zawierają to, czego chcę).