gpt4 book ai didi

c - 通过消息队列发送void*对象[linux]

转载 作者:行者123 更新时间:2023-11-30 17:52:54 25 4
gpt4 key购买 nike

所以,我实现了自己的 mpi 库(简化版本),我需要在进程之间发送/接收一些数据。 MPI_Send 看起来像这样(void *buf、int count、数据类型 data 等...)。所以这意味着我需要发送 buf 指向的地址的数据类型(char、double 或 int)的 count 元素。我需要通过消息队列(mq)发送它们。 MPI_Recv 采用大约相同的参数。目前,这是我在发送和接收中所做的事情:

    //Sender part of code
ret=mq_send(mq,buf,sizeof(buf),0);
if(ret < 0)
return MPI_ERR_IO;
//Receiver part of code
ret = mq_receive(mq, buf, MSGSIZE, NULL );
if(ret < 0)
return MPI_ERR_IO;

现在我只接收数组的第一个元素。我该如何发送整个内容?这就是我的想法

    //Sender part of pseudocode
for(i=0,count)
element=(cast to datatype)buf[i];
mq_send(mq,element,sizeof,0);
//Receiver part of pseudocode
//i receive the count number of elements prior to this message
for(i=0,count)
mq_receive(mq,local_variable,etc...)
somehow store them into my void *buf which i receive as an argument ??

如果有不清楚的地方,我会回复

最佳答案

您可以使用 mq_send 的第三个参数指定放入队列中的数据量。在你的情况下是:

ret=mq_send(mq,buf,sizeof(buf),0);

假设 buf 是按照以下方式初始化的

float f[2];
void *buf = f;

那么表达式sizeof(buf)的意思是:名为“buf”的指针的大小。虽然它可能适用于某些架构,但正确的方法是

ret=mq_send(mq,buf,sizeof(float) * <number of elements>, 0);

这意味着 float 的大小乘以数组中存储的 float 的数量。

在这种情况下,您会将整个数组放入队列中。您还可以避免迭代并仅使用恒定数量的消息,而不是线性数量。

关于c - 通过消息队列发送void*对象[linux],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931129/

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