如何在父进程和子进程之间发送带有 pipe() 的矩阵?

Posted

技术标签:

【中文标题】如何在父进程和子进程之间发送带有 pipe() 的矩阵?【英文标题】:How can I send a matrix with pipe() between parent process and child process? 【发布时间】:2021-08-23 12:41:36 【问题描述】:

我这样声明和分配矩阵:

int** prevMatrix = NULL;

prevMatrix = (int**)malloc(sizeof(int*) * (arraySize[0] + 2));
for (int i = 0; i < arraySize[0] + 2; i++)
    prevMatrix[i] = (int*)malloc(sizeof(int) * (arraySize[1] + 2));

我想知道如何将这个矩阵从子进程发送到父进程。 我尝试使用 pipe(),但我认为我在 write() 缓冲区大小中输入了错误的值。

如何将此矩阵发送到父进程?

【问题讨论】:

sizeof(int*) * arraySize[0] + 2 不是 sizeof(int*) * (arraySize[0] + 2)。您的分配无效。 @KamilCuk 哦,我在这里复制时错过了。我写的代码和你的一样。 【参考方案1】:

这是最好的例子之一,为什么有时最好不要分配双指针,而是分配一个单指针并做一些简单的算术来获取索引。

假设您需要一个矩阵m,其维度为xy。分配将是:

int *m = malloc(x * y * sizeof *m);

访问索引 (i, j) 处的元素将是:

m[i * x + j]

通过套接字fd 发送值:

send(fd, m, x * y, 0);

或者:

write(fd, m, x * y);

另一种方法是继续使用多维矩阵,但是您必须逐行发送,这更麻烦。

【讨论】:

我没有想到像这样解决它的方法。感谢您的宝贵时间!

以上是关于如何在父进程和子进程之间发送带有 pipe() 的矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

swoole父进程和子进程之间通信的例子

swoole父进程和子进程之间通信的例子

为啥在并行子进程之间分叉两次后 pipe() 不工作?

节点 IPC 如何在 2 个进程之间工作

进程间通讯-2(pipe)

如何在Linux上的c中的父进程和子进程之间进行乒乓球