Question

J'utilise POSIX IPC et selon la documentation - http://man7.org/linux/man-pages/man3/mq_send.3.html

La méthode mq_send() envoie uniquement des données char* et mq_recv() ne reçoit que des données de caractères.Cependant, je souhaite envoyer une structure personnalisée à ma file d'attente de messages et du côté de la réception, je souhaite obtenir la structure.

exemple de structure :

struc Req
{
  pid_t pid;
  char data[4096];
}

Alors, est-ce que quelqu'un sait comment accomplir cela en langage C ?

Était-ce utile?

La solution

Il vous suffit de transmettre l'adresse de la structure et de la convertir en type de pointeur approprié :const char * pour mq_send et char * pour 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);

Autres conseils

Vous pouvez utiliser MEMCY comme suit:

char * data; //Do appropriate allocation.

memcpy(data, &req, sizeof(req)));

sur la réception de vous copier des données reçues dans la structure.

memcpy(&rec, data, sizeof(rec)));

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top