我目前正在尝试通过消息队列发送一个整数。我将此整数的地址类型转换为 (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/