我正嘗試使用Internet域套接字爲聊天應用程序創建一個小型服務器。服務器由調度程序和主服務器組成。C - 通過FIFO將在線程中創建的PIPE FD發送到父進程
調度員負責檢測新的連接請求並在新線程中處理它們。該線程通過FIFO將信息發送到主服務器。線程發送的包具有它創建的管道FD,以便主服務器可以與響應進行通信。調度程序由主服務器用叉子初始化,然後使用execve()。
問題是我無法將數據寫入服務器的管道。我得到[EBADF錯誤文件描述符]錯誤。
據我所知,我應該將管道FD從父進程傳遞給子進程,但這種解決方案對我來說並不起作用,因爲我不知道我將需要多少管道同一時間。此外,我不想爲每個線程創建一個FIFO,這意味着我需要爲每個活動的線程創建一個新文件,我認爲這不是一個非常優雅的解決方案。
所以總結:
- 是否有可能使用管道以這種方式?
- 如果問題出在 使用管道,爲什麼我不能通過FIFO傳遞管道FD,並在另一個進程中使用 ?我讀過可以通過使用UNIX域套接字 傳遞FD來在無關進程與管道之間通信 。這些方法有什麼區別?
- 你會推薦什麼解決方案?
有一種機制可以通過套接字連接傳遞文件描述符;它不適用於其他通信機制,如FIFO。 –
我已經添加了「unix」標籤,因爲這似乎是關於unix編程的。 – Joni