如何在父进程和子进程之间发送带有 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
,其维度为x
和y
。分配将是:
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() 的矩阵?的主要内容,如果未能解决你的问题,请参考以下文章