首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fork()和exec()之后创建管道

问在fork()和exec()之后创建管道
EN

Stack Overflow用户
提问于 2012-11-06 00:12:16
回答 3查看 1.9K关注 0票数 1

考虑以下几点:

  1. 带有子进程的父进程
  2. 子程序使用exec系统调用运行另一个程序。
  3. 父和子通过双向管道(rest中名为MAINPIPE )进行通信
  4. 子服务器绑定在端口上(例如5000)

我的程序应按以下方式工作:

如果子程序收到来自客户端的特定消息,则创建另一个双向管道给他的父节点,并发送/接收一些信息。

问题是:

当我在子管道中创建一个管道(使用pipe())并将文件描述符传递给父管道(使用MAINPIPE)时,父文件描述符在尝试从管道读取时会得到“坏文件描述符”错误消息。

知道吗?

编辑:

伙计们,

我的问题不是把文件--在子进程中创建新管道-that的参与者--传递给父进程,我已经使用MAINPIPE完成了,

但是问题是:父进程不能从新管道中读取,得到了“坏的文件描述符”错误消息,在父进程中文件描述符似乎是关闭的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-12 14:11:06

文件描述符属于进程。在你的例子中,子进程。

传输文件描述符的数量(在您的示例中为10 )并不会传输文件描述符本身。它只传递数字10。数字10可以表示子进程中的文件描述符10,但是由于文件描述符属于进程,在父进程中它是没有意义的。子进程仅在创建父进程时从父进程继承文件描述符。

在创建子文件后打开的任何文件描述符都不会在父级和子级之间共享。

如果您需要将实际的文件描述符传递给另一个进程(例如父进程),unix域套接字有一种这样做的机制,这里的其他帖子包含了与此相关的链接。

票数 -1
EN

Stack Overflow用户

发布于 2012-11-06 00:16:15

在分叉之前创建管道。然后,这些管道在父管道和子管道中都可用。不需要传递文件描述符。

下面是指向使用unix域套接字向父级发送文件描述符的库的链接:

http://gitorious.org/libancillary/libancillary

这是消息来源:

http://gitorious.org/libancillary/libancillary/trees/master

当然,你必须调整这个以适应你的要求。

票数 3
EN

Stack Overflow用户

发布于 2012-11-06 00:48:32

有一种方法可以将文件描述符从子进程发送到父进程:您还没有说明如何尝试这样做,因此我无法说明为什么它不适合您。

注意,由于您需要一个现有管道来发送文件描述符,所以您可以在一个管道上使用多个逻辑流。它可能更简单,更便携。

编辑:您仍然拒绝显示用于将文件描述符从子文件发送到父文件的代码,但是this question包含了一些相关的讨论。你能确认一下你是否在做类似的事情吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13242506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档