Como receber dados de tamanho dinâmico de uma fila de mensagens?
Eu tenho que enviar e receber dados dinâmicos usando uma fila de mensagens SysV para um projeto universitário.
O comprimento dos dados é transmitido em uma mensagem separada,size
é já conhecido.
E é assim que eu tento receber os dados. Eu tenho que admitir que eu não sou um especialista em C ++, especialmente quando se trata de alocação de memória.
struct {
long mtype;
char *mdata;
} msg;
msg.mdata = (char *)malloc(size * sizeof(char));
msgrcv(MSGQ_ID, &msg, size, MSG_ID, 0);
O problema parece ser omalloc
chamar, mas eu não sei como fazer isso direito.
EDITAR
O que eu tento é ter algum tipo deler método em um wrapper OO ao redor das filas de mensagens. Eu gostaria de ler os dados na fila de mensagens em umchar[]
ou umstd::string
. O que eu tenho agora parece (simplificado) assim.
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;
}
Tudo o que recebo são falhas de segmentação ou dados completamente corrompidos (embora esses dados, por vezes, contenham o que eu quero).