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

Typecasting over a message queue in c

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

struct Type{

    char *data;
    long mtype;
};

这会给你想要的。

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