【发布时间】:2014-05-02 20:47:54
【问题描述】:
我正在使用 C linux 中的消息队列机制发送消息。但是 msgrcv 函数存在一些问题。它将错误显示为无效参数。 请检查一下。
//msgrcv.c
#include"msgbuf.h"
int main()
{
int msqid;
key_t key;
message_buf *rbuf;
rbuf=malloc(sizeof(*rbuf));
// rbuf->m=malloc(sizeof(M1));
key = ftok("/home/user",'a');
if ((msqid = msgget(key, IPC_CREAT)) ==(key)-1)
{
perror("msgget");
exit(1);
}
/* Receive an answer of message type 1. */
if (msgrcv(msqid, &rbuf, sizeof(rbuf->m), 1, 0) < 0)
{
perror("msgrcv"); //invalid argument to msgrcv
exit(1);
}
/* Print the answer. */
printf("Received message text= %s\n", rbuf->m.cp);
return 0;
}
现在是 msgbuf.h
//msgbuf.h
typedef struct msgclient
{
int msglen;
int msgtype;
char *cp;
}M1;
typedef struct msgbuf1
{
long mtype;
M1 m;
} message_buf;
我也想知道如何使用消息队列进行两种方式的通信。我需要创建两个消息队列来完成两个进程之间的通信吗?也欢迎相同的示例代码。
谢谢:)
【问题讨论】:
标签: c linux ipc message-queue msgrcv