我正尝试使用Internet域套接字为聊天应用程序创建一个小型服务器。服务器由调度程序和主服务器组成。C - 通过FIFO将在线程中创建的PIPE FD发送到父进程
调度员负责检测新的连接请求并在新线程中处理它们。该线程通过FIFO将信息发送到主服务器。线程发送的包具有它创建的管道FD,以便主服务器可以与响应进行通信。调度程序由主服务器用叉子初始化,然后使用execve()。
问题是我无法将数据写入服务器的管道。我得到[EBADF错误文件描述符]错误。
据我所知,我应该将管道FD从父进程传递给子进程,但这种解决方案对我来说并不起作用,因为我不知道我将需要多少管道同一时间。此外,我不想为每个线程创建一个FIFO,这意味着我需要为每个活动的线程创建一个新文件,我认为这不是一个非常优雅的解决方案。
所以总结:
- 是否有可能使用管道以这种方式?
- 如果问题出在 使用管道,为什么我不能通过FIFO传递管道FD,并在另一个进程中使用 ?我读过可以通过使用UNIX域套接字 传递FD来在无关进程与管道之间通信 。这些方法有什么区别?
- 你会推荐什么解决方案?
有一种机制可以通过套接字连接传递文件描述符;它不适用于其他通信机制,如FIFO。 –
我已经添加了“unix”标签,因为这似乎是关于unix编程的。 – Joni