我正在尝试实现一个程序,该程序将从数组中删除数字,这些数字可以被范围内的奇数整除:3,4,...,n一次一个。
这必须通过使用fork创建多个进程来完成。每个进程将删除范围3,4,...,n中的某个奇数的倍数,然后将修改后的数组传递给下一个进程,然后将删除下一个奇数的多个,然后将其传递给下一个进程并将其传递给下一个过程,依此类推。
例如,如果我有阵列{40,39,17,15,12,20,10}。第一个过程将删除3的倍数,然后将{40,17,20,10}传递给下一个过程,该过程将删除5的倍数,依此类推。
必须为范围内的每个奇数创建一个新进程:3,4,...,n。它有点像"链"。
最后,生成的数组将打印到标准输出。
注意:我知道这可以在不使用fork和多个进程的情况下完成,但我需要使用fork然后通过管道在进程之间进行通信。
到目前为止我所拥有的:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, char ** argv){
// array initialized before
int array[10] = {5, 89, 10, 1 ,2 ,3 ,4, 30, 66, 7};
// n is given by command line argument.
int n = strtol(argv[1], NULL, 10);
pid_t child;
// Creating pipes to communicate between processes.
int fd[2 * n];
for (int i = 0; i < n; i++) {
pipe(&fd[2*i]);
}
for (i = 0; i < k; i++) {
child = fork();
if (child < 0) {
perror("fork");
exit(1);
}
else if(child > 0){
// Parent
int status;
wait(&status);
exit(0);
}
else{
// Child
}
}
return 0;
}
我不确定如何并行创建进程,然后从数组中删除元素,然后使用我创建的管道将其从一个进程传递到另一个进程。任何帮助,将不胜感激。
答案 0 :(得分:0)
我认为使用其他评论中的父子示例。您必须在子项中重复fork并将其设计为层次结构。像这样的东西的第一个版本可能有点复杂,但如果它可以工作,它可能会简化回亲子例子。