在进程之间传递值

时间:2018-03-04 07:10:25

标签: c parallel-processing pipe fork

我正在尝试实现一个程序,该程序将从数组中删除数字,这些数字可以被范围内的奇数整除: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;
}

我不确定如何并行创建进程,然后从数组中删除元素,然后使用我创建的管道将其从一个进程传递到另一个进程。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为使用其他评论中的父子示例。您必须在子项中重复fork并将其设计为层次结构。像这样的东西的第一个版本可能有点复杂,但如果它可以工作,它可能会简化回亲子例子。