说,我有一个名为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()
执行任务。然后,子进程将其结果发送回主进程进行进一步处理。
此刻,我什至不确定我是否朝着正确的方向前进。 除了与管道有关的零件外,我试图使这个问题尽可能地笼统。如果我缺少任何信息,请告诉我。只是免责声明,这是一个与作业相关的问题,我不不想要完整的答案,只是我的思维过程是否正确。如果没有,我想念什么?
感谢您的帮助。