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