我正在使用 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;
我也想知道如何使用消息队列进行两种方式的通信。我需要创建两个消息队列来完成两个进程之间的通信吗?也欢迎使用相同的示例代码。
谢谢 :)