open() and pipes
Peter Corlett
abuse at cabal.org.uk
Wed Aug 2 17:15:55 BST 2006
On 2 Aug 2006, at 16:57, Uri Guttman wrote:
[...]
> socketpair and pipe are the same call internally on most/all modern
> unixes these days. both create 2 handles for the parent/child for use
> after forking. and they don't have any way to attach directly to a
> process, that is done by the fork/exec calls. all that is done for you
> in ipc::open2/3 which is why that module is there. the problem is
> solved
> already, you just need to code so there is no io deadlock or use async
> io which won't block. nuff said.
The syscall might well be the same, but it's what's exposed at the
libc and Perl layers that's really of interest here.
IPC::Open2 opens two pipes, one in each direction[0] whereas a
socketpair would allow it to be done with one filehandle. Sometimes a
socketpair is what you really need, so it's a bit of a shame that
Perl doesn't let you have them easily.
I suspect that implementing David Cantrell's open(FOO, "|program|")
in terms of socketpair wouldn't actually be that hard. Getting the
patch accepted might be more interesting though :)
[0] It actually opens *three* because it wraps IPC::Open3
More information about the london.pm
mailing list