1
我是linux编程的小老虎,所以请耐心等待。在我的应用程序中,我fork(),然后execl()设置一个单一的管道读取后,另一个二进制文件。后叉和exec是好的,我做一个dup2()从执行二进制文件读入。我需要我的父应用程序等待它创建的进程的输出,并且一旦输出,就读取它。我想我会使用select(),然后等待几毫秒,然后尝试查看是否有要读取的数据,如果有,请使用read()。然而,我的代码不起作用,因为select()将fd_set作为参数,而我的管道是通过pipe()和dup2()进行int转换的。我能做些什么来克服这一点,还有另一种选择吗?请注意,我不会阻止父进程,直到进程结束,但希望在子进程运行时读取信息。如何在选择分叉和执行后使用管道?
这就是我在linux.die.net上阅读的内容,但它并没有解释任何地方如何或如果我可以使用管道选择。 我必须以某种方式将管道转换为fd_set结构吗?我必须指出它吗?正如我所说,我已经有了一个int foo,这是一个管道,它被dup2欺骗。我可以使用select,如果是,如何? – 2011-05-19 04:03:56
你所说的管道实际上是管道的文件描述符。像John zwinck说的那样,你需要将管道的文件描述符添加到fd_set中。 – Sean 2011-05-19 05:02:20
好吧,我想出了你的帮助肖恩,谢谢。这正是你所说的。声明一个fd_set,使用FD_ZERO,然后使用FD_SET将管道添加到声明的fd_set中。谢谢! – 2011-05-19 21:58:20