open produce un fork y la entrada
o la salida del hijo queda conectado
al proceso padre a través del
manejador de ficheros que se acaba de abrir.
open.
|-
la escritura del padre en el manejador se
recibe en el hijo en STDIN.
Del mismo modo, si abrimos un pipe desde menos
-| la salida del hijo por STDOUT
se recibe en el manejador.
El siguiente ejemplo es una variante del que aparece en
perldoc perlipc:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ cat -n pipe2minus
1 #!/usr/bin/perl -w
2 use strict;
3
4 my $pid = open(my $TO_KID, "|-");
5 die "Can't fork\n" unless (defined $pid);
6
7 if ($pid) { # parent
8 print $TO_KID "2 x $_ = ".2*$_."\n" for 1..3;
9 close($TO_KID) || warn "kid exited $?";
10 } else { # child
11 while (<STDIN>) { # child's STDIN is parent's $TO_KID
12 print "Father says $_";
13 }
14 exit; # don't forget this
15 }
Al ejecutar tenemos:
lhp@nereida:~/Lperl/src/perl_networking/ch2$ ./pipe2minus Father says 2 x 1 = 2 Father says 2 x 2 = 4 Father says 2 x 3 = 6
