2013-04-26 26 views

回答

2

沒有這樣的限制。任何兩個具有獲取管道每端的參考的方法都可以進行通信。一個進程甚至可以使用管道與自己進行通信。

任何進程都可以使用任何以下在進程之間傳遞文件描述符的通用方法來獲得對管道端點之一的引用。在這方面管道並不特別。

  • 該過程本身被稱爲pipe()並且獲得兩端的文件描述符。
  • 該進程通過套接字接收到的文件描述符爲SCM_RIGHTS輔助數據。
  • 該進程使用Linux上的/proc/<pid>/fd等特定於平臺的方式從另一個任意進程獲取文件描述符。
  • (可能有其他方法。)
  • 該進程從使用上述方法之一獲取它的祖先(直接或間接)繼承文件描述符。
2

確實有限制。

管用fd到讀/寫數據,fd是每個進程,進程保持fd表,兒童在叉繼承fd表,並且每個繼承fd指代相同open file作爲父進程,這是由內核維護。


通過相同的管道進行通信的過程應當是相關的。

這意味着,該2個進程都應該意識到的管的2 fd


<TLPI>說:

管道應該由一個共同祖先的一系列fork()調用,導致過程的存在之前創建。

+0

是的,這看起來是正確的。 – user1174114 2016-01-02 21:29:58

+1

那麼也許你應該有upvoted! – 2016-12-08 06:00:08

相關問題