in reply to simple IPC
use strict; my @array = (); pipe my $read, my $write or die "Cannot open pipe"; for(1..3) { defined(my $pid = fork) or die "Can't fork\n"; if($pid) { next; # Parent: continue loop } # Child pipe_send($write, "I'm process $$!"); exit 0; } # Parent for(1..3) { my $element = pipe_recv($read); push @array, $element; } print "array = @array\n"; ################################################## sub pipe_send { ################################################## my($fh, $message) = @_; my $bytes = sprintf "0x%08x", length($message); syswrite($fh, $bytes . $message); } ################################################## sub pipe_recv { ################################################## my($fh) = @_; die "Protocol corrupted" if sysread($fh, my $bytes, 10) != 10; $bytes = hex($bytes); my $data = ""; while($bytes != 0) { my $read = sysread($fh, my $chunk, $bytes); last unless defined $read; $bytes -= $read; $data .= $chunk; } return $data; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: simple IPC
by keithw99 (Initiate) on Dec 27, 2004 at 02:43 UTC |