привет.
да, действительно. этот код рабочий!
и если в моем реальном коде оставить один пайп, то тоже все работает. но у меня немного другая ситуация. у меня четыре пайпа и вот примерно так это выглядит:#!/usr/bin/perl
use IO::File;
use File::Spec;
use POSIX;
use strict;
sub print_arr {
my @t = @_;
foreach my $l (@t) {
print $l;
}
}
pipe(CHILD, PARENT);
pipe(R1,W1);
pipe(R2,W2);
pipe(R3,W3);
R1->autoflush(1);
R2->autoflush(1);
R3->autoflush(1);
CHILD->autoflush(1);
my @arr=();
my $delim = '---------------------------------------------------------------------------'."\n";
print "Single process work\n";
my $pid=fork;
if($pid==0) {
#Child work, children process read file, to arr, and send to parent
close CHILD;close R1;close R2;close R3;
print "Child process work: $$\n";
#здесь формируется массив @arr
print W1 "1";
open(F_IN, "<", '/var/log/nortel/linuxbase.log');
while(my $t = <F_IN>) {
push @arr, $t;
}
close(F_IN);
print "Child Process: makes array:\n";
print "Child Process:".$delim;
# print_arr(@arr);
print scalar @arr;
print "Child Process:".$delim;
my $count=1;
foreach my $send_msg (@arr){
print PARENT $send_msg;
print "'$count'{child}\n";$count++;
}
close PARENT;
close W1;close W2;close W3;
_exit(0);
}
else {
#Parent work, parent process read data from pipe child and make array, after all read print
print "Parent process work: $$, child: $pid\n";
$SIG{CHLD} = "IGNORE";
close PARENT;
close W1;close W2;close W3;
my $read1=<R1>;
print "'$read1'\n";
while(my $recv_msg=<CHILD>) {
push @arr,$recv_msg;
}
print "Parent Process:".$delim;
# print_arr(@arr);
print scalar @arr;
print "Parent Process:".$delim;
close CHILD;
close R1;close R2;close R3;
waitpid($pid,0);
}
данный код уже висит.
можно как-либо увеличить количество памяти, которое отводиться под пайпы? как я понимаю, оно всегда постоянно и равно, допустим, COUNT_MEM и если открывается пять пайпов то на каждый пайп отводится COUNT_MEM/5 byte.
ps или я несу полную чушь? :)))
please help :)
pps. последнее, говорит child: '602'{child}, тоесть он отправил 602 сообщения в пайп.