C程序创建3个子进程,从3个不同的文件中读取

时间:2013-12-21 14:00:14

标签: c linux unix fork pipe

我有一个问题,如何编写 C程序,创建3个子进程,从3个不同的文件读取并使用管道写入父进程。

每个孩子在写入每50个字符之间应该等待一段时间(3-10秒)。

父亲应该从管道所有内容(从所有3个文件中)写入一个新文件。

3 个答案:

答案 0 :(得分:1)

要扩展Rachit Jain的答案,您可以使用文件名创建一个数组,并使用循环计数器作为数组的索引,以了解每个子进程应打开哪个文件。当每个子进程应该处理相同的文件时,效果最好,只需并行执行。

至于管道,你真的需要三个不同的管道,每个子流程一个,或者来自孩子的数据可能会混合。使用例如selectpoll检查来自不同管道的输入。

答案 1 :(得分:1)

首先阅读Advanced Linux Programming

首先需要使用pipe(2)系统调用创建3个管道(重复3次)。

然后,您需要使用fork(2)系统调用创建3个子进程。在失败时处理fork<0的3个可能返回值,在子项中处理==0,在父项中处理>0。请记住父母中的pid_t。在每个子呼叫dup2(2)中,STDOUT_FILENO为相关管道的输出。

最后,在父级中,使用event loop多路复用系统调用来创建一个简单的poll(2),以找出应该是read(2)

的管道

在孩子身上使用sleep(3)random(3),但不要忘记播种srand - PRNG带有随机内容(例如{pid得到的getpid(2) {3}}添加到当前time(2) ....;或使用/dev/urandom查看urandom(4)

Jonathan Leffler所述,由于3 * 50小于PIPE_MAX,您可能使用单个管道。我觉得使用事件循环更安全,更通用(如果你将50替换为500000,大于PIPE_MAX,它将起作用。)

我认为我不想或没有时间为你做更多的功课。我给了你足够的提示。

我认为Federos Koros fedoroskoros@gmail.com trying to pay someone做作业是非常错误的,我确实给他发了一封关于此事的私人电子邮件。问题现已删除。

答案 2 :(得分:0)

fork()在带有变量的循环中三次,比如i,并且在i = 0,i = 1和i = 2的下面放置条件。在每个条件中读取你的一个文件。

现在,休息不是一项艰巨的任务。