Hi,
I want make a bi-directional communication between two processes, using pipes.
To make it possible, I create 2 pipes, on for on way ( pipe(LEI_1,WRITE_1) ) an
another to opposite way (pipe(READ_2,WRITE_2);).
When I run my program, the process stops on PROCESS 2 END, if I comment the
line $buf = <LEI_1>;, it runs well
Code (run well )
#!/opt/perl5/bin/perl5.6.1
$SIG{'CHLD'} = 'IGNORE';
pipe(LEI_1,WRITE_1);
pipe(READ_2,WRITE_2);
if ($pid = fork)
{
close LEI_1;
close WRITE_2;
print "PROCESS 1 \n";
printf WRITE_1 "Hello father:";
$pai = <READ_2>;
print "Message from father: $pai \n ";
sleep 2;
print "PROCESS 1 END \n";
exit(0);
}
if ($pid = fork)
{
print "PROCESS 2 \n";
sleep 1;
print "PROCESS 2 END \n";
exit(0);
}
close WRITE_1;
close READ_2;
#$buf = <LEI_1>;
print "message from son : $buf \n";
printf WRITE_2 "Hello Son";
exit(0);
**********************************************************************
OUTPUT:
PROCESS 1
PROCESS 2
message from son :
PROCESS 2 END
Message from father: Hello Son
PROCESS 1 END
**********************************************************************
CODE (NOT RUN) (With $buf = <LEI_1>; uncommented)
#!/opt/perl5/bin/perl5.6.1
$SIG{'CHLD'} = 'IGNORE';
pipe(LEI_1,WRITE_1);
pipe(READ_2,WRITE_2);
if ($pid = fork)
{
close LEI_1;
close WRITE_2;
print "PROCESS 1 \n";
printf WRITE_1 "Hello father:";
$pai = <READ_2>;
print "Message from father: $pai \n ";
sleep 2;
print "PROCESS 1 END \n";
exit(0);
}
if ($pid = fork)
{
print "PROCESS 2 \n";
sleep 1;
print "PROCESS 2 END \n";
exit(0);
}
close WRITE_1;
close READ_2;
#$buf = <LEI_1>;
print "message from son : $buf \n";
printf WRITE_2 "Hello Son";
exit(0);
****************************************************
OUTPUT:
PROCESS 1
PROCESS 2
PROCESS 2 END
****************************************************
So, it's very strange, so I can not have two pipes?, what's the problem.
Thanks
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>