【发布时间】:2014-05-03 03:26:33
【问题描述】:
我正在 C linux 中实现 IPC 的消息队列机制。下面是我的接收过程。它没有打印收到的消息。它正在生成一个有效的 msqid,我认为 msgrcv 函数的其他参数也是正确的。为什么会这样?
//header files
#include"msgbuf.h"
int main()
{
int msqid;
key_t key;
int msgflg = 0666;
message_buf *rbuf;
rbuf=malloc(sizeof(*rbuf));
rbuf->m=malloc(sizeof(M1));
key = ftok("/home/user",12);
if ((msqid = msgget(key, msgflg)) ==-1)
{
perror("msgget");
exit(1);
}
printf("\n\n%d\n",msqid); //working fine till here.
/* Receive an answer of message type 1. */
if (msgrcv(msqid, &rbuf, sizeof(rbuf->m), 1, 0) < 0)
{
perror("msgrcv");
exit(1);
}
/* Print the answer. */
printf("Received message text= %s\n", rbuf->m->cp);
return 0;
}
现在是 msgbuf.h
typedef struct msgclient
{
int msglen;
int msgtype;
char *cp;
}M1;
typedef struct msgbuf1
{
long mtype;
M1 *m;
} message_buf;
【问题讨论】:
-
我在服务器进程中为cp分配了空间。我这里也需要分配空间吗??
-
改变甚至没有效果。但是 *rbuf 表示分配给 msglen、msgtype 和 msgclient 的 cp 以及 msgbuf1 的 mtype 的空间。所以虽然不需要。
-
我知道这是一般方法。但是如果我的数据不是字符数组而是一些结构,那怎么办??
标签: c linux ipc message-queue