Linux
我可以通過管道將任何兩個程序相互連接嗎?
在來自The Design and Implementation of the 4.4BSD Operating System 的這一頁中,據說:
管道和套接字之間的一個主要區別是管道需要一個共同的父程序來設置通信通道
但是,如果我正確記錄,創建新流程的唯一方法是
fork
現有流程。所以我真的看不出兩個程序怎麼不能有一個共同的祖先。那麼我認為任何一對程序都可以通過管道相互連接是正確的嗎?
那麼我認為任何一對程序都可以通過管道相互連接是正確的嗎?
並不真地。
管道需要在子程序被分叉*之前由父程序設置。*一旦子程序被分叉,它的文件描述符就不能被“從外部”操縱(忽略調試器之類的東西),父程序(或任何其他程序)不能在事後執行“設置 comms.channel”部分.
因此,如果您採用兩個已經在執行的隨機程序,則無法直接在它們之間建立管道。您需要使用某種形式的套接字(或其他 IPC 機制)來讓它們進行通信。(但請注意,某些作業系統,其中包括 FreeBSD,允許您在 Unix 域套接字上發送文件描述符。)