gpt4 book ai didi

c - 在 c 中的消息队列上进行类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:46 24 4
gpt4 key购买 nike

我目前正在尝试通过消息队列发送一个整数。我将此整数的地址类型转换为 (char *),因为将来我想接受其他数据类型,并且此数据在设计用于消息队列的结构中发送。

通过消息队列(我已验证其工作正常),我正在发送一个结构类型:

struct Type{

long mtype;
char *data;
};

要发送消息,从发送进程执行以下代码:

struct Type* ack = malloc(sizeof(struct Type));
int temp = 999;

ack->mtype = 1;
ack->data = (char *)&temp;


if(msgsnd(msqid, ack, sizeof(struct Type) - sizeof(long), 0) == -1){

perror("Sending acknowledgement to producer\n");

}

在接收端,然后执行以下操作:

struct Type *rack = malloc(sizeof(struct Type));

rack->mtype = 1;

//Wait for acknowledgement from server
if(msgrcv(prodmsqid, rack, sizeof(struct Type) - sizeof(long), 0, 0) == -1){

perror("msgrcv for acknowledgement from server");

exit(1);


}
printf("Acknowledgement has arrived: %d\n",(int)rack->data);

此 printf 的输出从非常大的数字 (8171536) 到 4 不等。

最佳答案

我认为问题在于您传递的是堆栈上的地址,int 地址转换为 char 地址。但是该 int 位置在发送后立即超出范围。如果我的看法是正确的,一种解决方法是将 int 位置设为全局。

关于c - 在 c 中的消息队列上进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557070/

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