考虑以下几点:
- 带有子进程的父进程
- child 使用 exec 系统调用运行另一个程序
- parent 和 child 通过双向管道(在休息时名为 MAINPIPE)进行通信
- child 是绑定(bind)在端口上的服务器(例如 5000)
我的程序应该按如下方式工作:
如果 child 从客户端收到特定消息,则创建另一个双向管道到他的 parent 并发送/接收一些信息。
问题是:
当我在子项中创建管道(使用 pipe()
)并将文件描述符传递给父项(使用 MAINPIPE)时,父项在尝试读取时收到“Bad file descriptor”错误消息来自管道。
有什么想法吗?
编辑:
伙计们,
我的问题不是将在子进程中创建的新管道的文件描述符传递给父进程, 我已经使用 MAINPIPE 做到了,
但问题是:父级无法从新管道读取,收到此错误消息“错误的文件描述符” 似乎文件描述符在父进程中被关闭了!
最佳答案
在 fork 之前创建管道。然后管道在父项和子项中都可用。无需传递文件描述符。
这里是一个库链接,它使用 unix 域套接字 将文件描述符从子级发送到父级:
http://gitorious.org/libancillary/libancillary
这是来源:
http://gitorious.org/libancillary/libancillary/trees/master
当然,您必须调整它以满足您的要求。
关于在 fork() 和 exec() 之后创建管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13242506/