X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlfork.pod;h=d930e9396e87565c874374ffcf1c2763f18e2acc;hb=cb50131aab68ac6dda048612c6e853b8cb08701e;hp=533dcfab31a35338b5dd633e4942e0f69c82409e;hpb=8560c20dd6b2f3dfec719d4b500be45742de4507;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlfork.pod b/pod/perlfork.pod index 533dcfa..d930e93 100644 --- a/pod/perlfork.pod +++ b/pod/perlfork.pod @@ -172,6 +172,73 @@ the seek position in the parent will change it in the child and vice-versa. One can avoid this by opening files that need distinct seek pointers separately in the child. +=item Forking pipe open() not yet implemented + +The C and C constructs are not yet +implemented. This limitation can be easily worked around in new code +by creating a pipe explicitly. The following example shows how to +write to a forked child: + + # simulate open(FOO, "|-") + sub pipe_to_fork ($) { + my $parent = shift; + pipe my $child, $parent or die; + my $pid = fork(); + die "fork() failed: $!" unless defined $pid; + if ($pid) { + close $child; + } + else { + close $parent; + open(STDIN, "<&=" . fileno($child)) or die; + } + $pid; + } + + if (pipe_to_fork('FOO')) { + # parent + print FOO "pipe_to_fork\n"; + close FOO; + } + else { + # child + while () { print; } + close STDIN; + exit(0); + } + +And this one reads from the child: + + # simulate open(FOO, "-|") + sub pipe_from_fork ($) { + my $parent = shift; + pipe $parent, my $child or die; + my $pid = fork(); + die "fork() failed: $!" unless defined $pid; + if ($pid) { + close $child; + } + else { + close $parent; + open(STDOUT, ">&=" . fileno($child)) or die; + } + $pid; + } + + if (pipe_from_fork('BAR')) { + # parent + while () { print; } + close BAR; + } + else { + # child + print "pipe_from_fork\n"; + close STDOUT; + exit(0); + } + +Forking pipe open() constructs will be supported in future. + =item Global state maintained by XSUBs External subroutines (XSUBs) that maintain their own global state may @@ -217,6 +284,8 @@ representation for pseudo-process IDs will be implemented in future. This document may be incomplete in some respects. +=back + =head1 AUTHOR Support for concurrent interpreters and the fork() emulation was implemented