用fork创建3个孩子

时间:2016-06-22 17:30:16

标签: linux pipe fork

我想要做的是用管道创建这种通信:

      1
    /   \
   3     2
    \   /
      4

所以应该有3个孩子。父母会向第一个和第二个孩子发送一些东西。他们完成工作后的第一个和第二个孩子将结果发送给第三个孩子。第三个孩子打印发送的数据。

有人可以在理论上告诉我,还是告诉我一个简单的例子,看看它应该如何?

1 个答案:

答案 0 :(得分:0)

管道只是发送方和接收方之间的通道。如你想要2和3能够发送一些东西到4,4的管道必须在1中创建(否则,4应该是2和3的直接子项,这是不可能的。

所以IHMO在这里是如何实现的:

  1. 程序启动
  2. 它创建所有管道:1-2,1-3,2-4,3-4
  3. 如果第一次请求。让孩子打电话给4:
    • 关闭所有未使用的管道
    • 从2-4读到eof
    • 打印
    • 从3-4读到eof
    • 打印
    • 出口
  4. 第二次分叉。让孩子调用常规3:
    • 关闭所有未使用的管道
    • 从1-3读取(仅需要数据或直到eof)
    • 做好工作
    • 写入3-4
    • 关闭管道
    • 出口
  5. 第三次分叉。让孩子调用例程为2 - 它与3相同,只是使用2-4而不是3-4,所以未使用的管道关闭不一样
  6. 关闭所有未使用的管道
  7. 将一些数据写入1-2并关闭其管道部分
  8. 将一些数据写入1-3并关闭其管道部分
  9. 等待所有孩子(这部分是可选的)
  10. 出口
  11. 可以改变上述许多的顺序。您必须先创建管道,不要在所有进程分叉之前关闭任何管道,并且(等待和)最后关闭。