在mq_send中发送struct

时间:2014-04-13 16:04:31

标签: c linux posix ipc mqueue

我正在使用POSIX IPC并根据文档 - http://man7.org/linux/man-pages/man3/mq_send.3.html

mq_send()方法仅发送char *数据,而mq_recv()仅接收字符数据。 但是,我想将自定义结构发送到我的msg队列,并且在接收端,我想获取结构。

示例结构:

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

那么,有没有人知道如何在C lang中实现这一目标?

2 个答案:

答案 0 :(得分:12)

您只需要传递结构的地址并将其转换为适当的指针类型:{char} *表示mq_send而char *表示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);

答案 1 :(得分:-2)

您可以按如下方式使用memcpy:

char * data; //Do appropriate allocation.

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

收到后,您将收到的数据复制到struct。

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