2016-06-22 65 views
0

我想要做的是創造這種溝通與管道:創建3個孩子用叉子

 1 
    / \ 
    3  2 
    \ /
     4 

所以應該會有3 children.The父母發送一些東西到第一和第二個孩子。第一個和第二個孩子在完成他們的工作之後將結果發送給第三個孩子。第三個孩子打印發送的數據。

有人能告訴我理論上還是給我看一個簡單的例子,應該如何看待?

+0

父級創建四個管道,然後分叉三個孩子。然後父母和孩子每個關閉他們自己不會使用的所有管端。這四個過程根據需要寫入/或讀取到剩餘的開放管端。根據具體要求,第三個孩子可能需要也可能不需要使用select()或poll()來幫助處理多路複用輸入,而無需不必要的阻塞。 –

回答

0

管道只是發送者和接收者之間的通道。正如你想要2和3能夠發送東西到4,必須已經創建了4的管道(否則,4應該是2和3的直接子節,這是不可能的)

因此,IHMO這裏是如何可以實施:

  1. 程序啓動
  2. 它創建的所有管道:1-2,1-3,2-4,3-4
  3. 如果叉第一次讓孩子通話例程爲4:
    • 關閉所有未使用的管道
    • 2-4讀取直到從3-4 EOF
    • 打印
    • 讀直至EOF
    • 打印
    • 出口
  4. 叉第二時間。 3,讓孩子調用程序:1-3讀
    • 關閉所有未使用的管道
    • (所需要的數據或直到EOF)
    • 完成其工作
    • 寫3-4
    • 接近管
    • 出口
  5. 第三次分叉。讓孩子呼叫例程爲2 - 它與3相同,只是使用2-4而不是3-4,所以未使用的管道關閉不一樣
  6. 關閉所有未使用的管道
  7. 將一些數據寫入1-2和關閉其管道
  8. 一些數據寫入到1-3和部分關閉管道
  9. 等待它的所有兒童(這部分是可選的)
  10. 退出其部分

上述許多順序可以更改。您必須首先創建管道,不要在所有進程分叉並且(等待和)最後關閉之前關閉任何管道。