C:在父进程和多个子进程之间进行读写操作

时间:2018-07-25 23:39:42

标签: c pipe fork unistd.h

说,我有一个名为worker(int in, int out)的函数,该函数根据给定的in文件描述符执行某些任务,并获取结果并将其写入out

它可能类似于:

while (read(in, buffer, some_max_length) > 0){
    // Do something with buffer
    .
    .
    write(out, some_other_info, some_size);
} 

说我还有一个主进程,它产生数量不定的进程,可能看起来像这样:

// Assume I have done error checking.
array_of_write_pipes[n][2];
array_of_read_pipes[n][2]; // Assume these have already been populated.

while(there is a word from stdin){
    // Spawn n processes 
    for(int i = 0; i < n; i++){
        n = fork();
        if(n == 0){
            write(array_of_read_pipes[i][1], some_data, some_max_length);
            worker(some_other_data, array_of_read_pipes[i][0], array_of_write_pipes[i][1]);
            exit(0);
        }
    }

    // Block of code waiting for all children to terminate.

    // Collect the results of each child process

    for(i = 0; i < n; i++){
        while (read(array_of_write_pipes[i][0], buffer, some_max_length) > 0){
            // Do something with buffer
            .
            .

        } 
    }
}

此刻,它似乎挂起了。

我的最终目标是让主进程向每个子进程发送相同的单词。然后,每个子进程都通过worker()执行任务。然后,子进程将其结果发送回主进程进行进一步处理。

此刻,我什至不确定我是否朝着正确的方向前进。 除了与管道有关的零件外,我试图使这个问题尽可能地笼统。如果我缺少任何信息,请告诉我。只是免责声明,这是一个与作业相关的问题,我不想要完整的答案,只是我的思维过程是否正确。如果没有,我想念什么?

感谢您的帮助。

0 个答案:

没有答案