考虑以下几点:
我的程序应按以下方式工作:
如果子程序收到来自客户端的特定消息,则创建另一个双向管道给他的父节点,并发送/接收一些信息。
问题是:
当我在子管道中创建一个管道(使用pipe())并将文件描述符传递给父管道(使用MAINPIPE)时,父文件描述符在尝试从管道读取时会得到“坏文件描述符”错误消息。
知道吗?
编辑:
伙计们,
我的问题不是把文件--在子进程中创建新管道-that的参与者--传递给父进程,我已经使用MAINPIPE完成了,
但是问题是:父进程不能从新管道中读取,得到了“坏的文件描述符”错误消息,在父进程中文件描述符似乎是关闭的!
发布于 2012-11-12 14:11:06
文件描述符属于进程。在你的例子中,子进程。
传输文件描述符的数量(在您的示例中为10 )并不会传输文件描述符本身。它只传递数字10。数字10可以表示子进程中的文件描述符10,但是由于文件描述符属于进程,在父进程中它是没有意义的。子进程仅在创建父进程时从父进程继承文件描述符。
在创建子文件后打开的任何文件描述符都不会在父级和子级之间共享。
如果您需要将实际的文件描述符传递给另一个进程(例如父进程),unix域套接字有一种这样做的机制,这里的其他帖子包含了与此相关的链接。
发布于 2012-11-06 00:16:15
在分叉之前创建管道。然后,这些管道在父管道和子管道中都可用。不需要传递文件描述符。
下面是指向使用unix域套接字向父级发送文件描述符的库的链接:
http://gitorious.org/libancillary/libancillary
这是消息来源:
http://gitorious.org/libancillary/libancillary/trees/master
当然,你必须调整这个以适应你的要求。
发布于 2012-11-06 00:48:32
有一种方法可以将文件描述符从子进程发送到父进程:您还没有说明如何尝试这样做,因此我无法说明为什么它不适合您。
注意,由于您需要一个现有管道来发送文件描述符,所以您可以在一个管道上使用多个逻辑流。它可能更简单,更便携。
编辑:您仍然拒绝显示用于将文件描述符从子文件发送到父文件的代码,但是this question包含了一些相关的讨论。你能确认一下你是否在做类似的事情吗?
https://stackoverflow.com/questions/13242506
复制相似问题