gpt4 book ai didi

c - IPC 在 C : Error in receiving 中使用消息队列

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:07 25 4
gpt4 key购买 nike

我在 C linux 中实现消息队列。我正在发送 integer = 17 并接收 integer = 0。请看下面,让我知道我的 msgsndmsgrcv 函数有什么问题。请注意:rbuf会将数据存储在rbuf->m->msglenrbuf->mtype中。

发送过程中

msgsnd(msqid, sbuf,sizeof(int), 0);
printf("\nmsglen = %d",rbuf->m->msglen); // 17

正在接收过程中。两者具有相同的 msqid。我已经验证过了。

msgrcv(msqid, rbuf, sizeof(int), 1, 0);
printf("\nmsglen = %d",rbuf->m->msglen); // 0

//msqid=98305, some valid id

这是我在另一个文件中定义的结构定义。

typedef struct message1
{
int msglen;
unsigned char *cp;
}msg1;

typedef struct msgbuf
{
long mtype;
msg1 *m;
} message_buf;

最佳答案

您正在发送一条消息,其中包含指向您的 message1 结构的指针。接收进程取消引用该指针,但在该进程中它并不指向同一事物。事实上,我很惊讶你没有遇到段错误。

你应该像这样定义 msgbuf:

typedef struct msgbuf
{
long mtype;
msg1 m;
} message_buf;

因此 msg1 结构包含在 msgbuf 中而不是由它指向。

此外,您需要指定的大小是 sizeof(message_buf),而不是 sizeof(int)。

关于c - IPC 在 C : Error in receiving 中使用消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com