2
我需要編寫一個應該有一個TCP套接字和一個命名管道的守護進程。通常,如果我需要使用「純」套接字來實現多IO服務器,那麼基於選擇的多IO模型總是我會選擇的模型。所以你們中的任何人都曾經使用過命名管道,或者你可以告訴我這是不可能的。提前致謝。是否可以在Perl中混合使用select命名的管道?
我需要編寫一個應該有一個TCP套接字和一個命名管道的守護進程。通常,如果我需要使用「純」套接字來實現多IO服務器,那麼基於選擇的多IO模型總是我會選擇的模型。所以你們中的任何人都曾經使用過命名管道,或者你可以告訴我這是不可能的。提前致謝。是否可以在Perl中混合使用select命名的管道?
總之一句話,是:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw/mkfifo/;
use IO::Select;
use IO::Handle;
my $filename = "/tmp/pipe.$$";
mkfifo $filename, 0700
or die "could not create pipe $filename: $!";
die "could not fork\n" unless defined(my $pid = fork);
unless ($pid) {
open my $fh, ">", $filename
or die "could not open $filename\n";
my $i = 1;
for (1 .. 10) {
sleep 1;
print $fh $i++, "\n";
$fh->flush;
}
exit;
}
my $s = IO::Select->new;
open my $fh, "<", "$filename"
or die "could not open $filename\n";
$s->add($fh);
OUTER: while (1) {
print localtime() . "\n";
my @files = $s->can_read(.25);
if (@files) {
for my $fh (@files) {
my $line = <$fh>;
print "from pipe: $line";
last OUTER if $line == 10;
}
}
}
這隻要你不是在Windows系統上的工作原理。 Win32'select'只適用於實際的網絡套接字。 – daotoad 2010-06-07 04:28:09