3
Может ли кто-нибудь объяснить, как я могу успешно передать свои процессы? Я считаю, что perldoc на IPC запутывает.Как я могу использовать `pipe` для облегчения межпроцессного взаимодействия в Perl?
То, что я до сих пор:
$| = 1;
$SIG{CHLD} = {wait};
my $parentPid = $$;
if ($pid = fork();)) {
if ($pid == 0) {
pipe($parentPid, $$);
open PARENT, "<$parentPid";
while (<PARENT>) {
print $_;
}
close PARENT;
exit();
} else {
pipe($parentPid, $pid);
open CHILD, ">$pid";
or error("\nError opening: childPid\nRef: $!\n");
open (FH, "<list")
or error("\nError opening: list\nRef: $!\n");
while(<FH>) {
print CHILD, $_;
}
close FH
or error("\nError closing: list\nRef: $!\n");
close CHILD
or error("\nError closing: childPid\nRef: $!\n);
} else {
error("\nError forking\nRef: $!\n");
}
Первое: Что perldoc pipe подразумевает под
READHANDLE
,WRITEHANDLE
?Во-вторых: Могу ли я реализовать решение, не полагаясь на CPAN или другие модули?
alt text http://www.wellho.net/slideshow/plx8.jpg
СПАСИБО !!! Это действительно простое решение. Еще один вопрос, как «выбрать $ writer» знать, чтобы написать родительский процесс? – 2010-04-01 04:43:59
В вызове 'pipe' подключен' $ reader' к '$ writer'. После 'fork' оба дескриптора файлов дублируются. 'select $ writer' существует, так что последующий' $ | = 1' работает с правильным дескриптором файла (а не с каким-либо соединением STDOUT). –
это имеет смысл. Я наткнулся на изображение, исследуя решение, описывающее то, о чем вы говорили, но не было никакого кода для ссылки. Отличный ответ! – 2010-04-01 04:51:14