我有一個父進程,它監聽套接字上的傳入連接,並在接受客戶端之後,它將關聯的文件描述符和其他日期傳遞給子節點(通過一個named管)。孩子在分支後寫在父親創建的文件描述符
從這一刻起,子進程將爲客戶提供服務,並且父進程不斷監聽新客戶。
我的問題是,當我嘗試在子進程中的文件描述符上寫入時,我將得到一個錯誤(錯誤的文件描述符)並且寫入失敗。我的猜測是,因爲這些文件描述符是在fork之後創建的,所以child不能簡單地使用它們,它們只屬於父進程。
那麼這是寫入失敗的原因嗎?有沒有任何可能的方法讓孩子使用這些文件描述符?
解
正如在由loreb答案所提到的,這是不可能實現以這種方式所期望的結果。我通過使用另一個管道將孩子的迴應指向父母做了臨時修復。由於文件描述符屬於父節點,它可以通過套接字將響應轉發回客戶端。
爲什麼不在父進程中創建套接字,以便父文件和子文件之間共享文件描述符.. –
@Abhiteshkhatri,因爲我的客戶端在fork之後將繼續連接並且在fork之後創建文件描述符父母和孩子。 – mdoust
你可以在fork之前創建一個共享內存,並在共享內存上保留文件描述符(我懷疑如何將文件描述符放在共享內存上)。如果是這樣,那麼你的描述符將在子和父之間共享。 –