enviar estrutura em mq_send
Pergunta
Eu estou usando POSIX IPC e de acordo com a documentação - http://man7.org/linux/man-pages/man3/mq_send.3.html
mq_send() método só envia char* dados e mq_recv() recebe apenas dados de caracteres.No entanto, eu quero enviar um costume estrutura para a minha msg fila e a receber, quero receber a estrutura.
exemplo de estrutura:
struc Req
{
pid_t pid;
char data[4096];
}
Então, alguém sabe como fazer isso em C lang?
Solução
Você só precisa passar o endereço da estrutura e lançá-lo apropriado para o tipo de ponteiro:const char * para mq_send
e char * para mq_receive
.
typedef struct Req
{
pid_t pid;
char data[4096];
} Req;
Req buf;
n = mq_receive(mqdes0, (char *) &buf, sizeof(buf), NULL);
mq_send(mqdes1, (const char *) &buf, sizeof(buf), 0);
Outras dicas
Você pode usar a função memcpy da seguinte forma:
char * data; //Do appropriate allocation.
memcpy(data, &req, sizeof(req)));
Na recepção você copiar novamente os dados recebidos em estrutura.
memcpy(&rec, data, sizeof(rec)));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow