By my understanding reading from STDIN (or any file handle) in array context will read everything untill an end of file character is found. That means that the "consumer" program will wait on the @lines = <STDIN>; line until the producer program from which you are piping information finishes running (which producer.pl never does). I believe you can get arround this probelm using IO::Select. Something like the following:
while (1) { # This tells us if the processReader has data for us to read if(@ready=$select->can_read(0)) { # Read the data, if it fails, its because we reached # the End of file. if(read($ready[0], $tmp, 128)) { $read_flag=1; } # Add the output from the process to the variable $output.="$tmp"; # We don't have any more to read, break out of the loop if(eof($ready[0]) ) { last; } }else{ sleep(2); } }
In reply to Re: Read from a Linux pipe hangs.
by JediWizard
in thread Read from a Linux pipe hangs.
by dmor4477
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |