perl pipe函数详解

计算机技术 · perl 程序开发2013-11-160次浏览0 个评论

pipe用法如下:

perl
pipe READHANDLE, WRITEHANDLE

pipe()函数打开一对相互联接的管道,通常在 fork 之前调用,然后管道的读端关闭 WRITEHANDLE,而写端关闭 READHANDLE。(否则这个管道 在写端关闭它以后不会告诉读端 EOF。)如果你设立了一个管道化的进程的循环,那么除非你非常 细心,否则很有可能发生死锁。另外,请注意 Perl 的管道使用标准的 I/O 缓冲,所以你可能需要在你的 WRITEHANDLE 上设置 $|($OUTPUT_AUTOFLUSH)以保证在每次输出操作之后冲刷数据,具体情况取决于应用。(和 open 一样,如果两个文件句柄都没有定义,那么它们将被自动激活。)
下面是一个小例子:

perl
pipe(README, WRITEME);
unless ($pid = fork) {   #    子进程
  defined $pid or die "can't fork: $!";
  close(README);
  for $i (1..5) { print WRITEME "line $i\n" }
  exit;
}
$SIG{CHLD} = sub { waitpid($pid, 0) };
close(WRITEME);
@strings = <README>;
close(README);
print "Got:\n", @strings;

请注意这里写入端是如何关闭读端以及读取端是如何关闭写入端的。你不能使用一条管道进行双向 交流。要么使用两个不同的管道,要么使用 socketpair 系统调用。

评论

0

评论加载中…

发表评论

0/2000