【发布时间】:2023-03-30 01:30:01
【问题描述】:
我需要开发一个程序,我有 10 个子进程,每个子进程处理数组的一部分,只要在该部分中发现大于 20 的数字,该进程就会通过管道将其写入路径进程。
到目前为止,我已经想出这个来写在管道中:
for (i = 0; i < CHILDS; i++)
{
pids[i] = fork();
if (pids[i] == 0)
{
for (j = 5000 * i; j < (5000 * i) + 5000; j++)
{
if (array[j].quantity > 20)
{
write(fd[1], &array[j].product_code, sizeof(array[j].product_code));
}
}
exit(0);
}
}
我怎样才能在父进程中从该管道中读取,并且每当他读取某些内容时将其写入数组?
我试过了,但没有用:
while ((p_code = read(fd[0], &p_code, sizeof(p_code))) > 0)
{
products[i] = p_code;
i++;
}
谢谢你:D
【问题讨论】:
-
“不工作”是什么意思?是阻塞吗?
read是否返回错误?read是否返回意外数据?父级(不是“父级”)是否关闭了文件描述符? -
确认:
p_code( read( ..., p_code, ...))不正确。您正在将数据读入 p_code,然后用返回值覆盖它。 -
@WilliamPursell 它在 products 数组中一遍又一遍地写入相同的数据。我已经解决了,非常感谢!