gpt4 book ai didi

C - 通过 FIFO 将在线程中创建的 PIPE FD 发送到父进程

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:27 25 4
gpt4 key购买 nike

我正在尝试使用互联网域套接字为聊天应用程序创建一个小型服务器。服务器由调度器和主服务器组成。

调度器负责检测新的连接请求并在新线程中处理它们。该线程通过 FIFO 将信息发送到主服务器。线程发送的包有一个它创建的管道 FD,以便主服务器可以与响应进行通信。调度程序由主服务器使用 fork 初始化,然后使用 execve()

问题是我无法从服务器向管道写入数据。我收到了 [EBADF Bad file descriptor] 错误。

我知道我应该将管道 FD 从父进程传递到子进程,但这个解决方案对我不起作用,因为我不知道我需要多少管道同时。此外,我不想为每个线程创建一个 FIFO,这意味着我需要为每个事件线程创建一个新文件,我认为这不是一个非常优雅的解决方案。

总结一下:

  • 是否可以以这种方式使用管道?
  • 如果问题出在管道的使用,为什么我不能通过 FIFO 传递管道 FD 并使用它在另一个过程中?我读到可以沟通通过使用 UNIX 域套接字在不相关的进程与管道之间通过 FD。这些方法之间有什么区别?
  • 您会推荐什么解决方案?

最佳答案

如果您使用 fork 从主服务器创建调度程序,它不会共享文件描述符表:调度程序最初将获得文件描述符的副本,但调度程序的任何文件或套接字之后打开将仅在调度程序中打开。

要创建调度程序,您应该使用共享文件描述符表的方法。例如,您可以使用 pthreads 线程。如果您使用 Linux,您可以将 fork 替换为低级别 clone函数,包括标志中的 CLONE_FILES

关于C - 通过 FIFO 将在线程中创建的 PIPE FD 发送到父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com