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?

Foi útil?

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
scroll top