LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1553|回复: 1

perl 管道关闭问题,请高人指点

[复制链接]
发表于 2006-8-18 15:25:32 | 显示全部楼层 |阅读模式
#!/usr/bin/perl
# Fig. 18.11: fig18_11.pl
# Using pipe to communicate with child processes.

use warnings;
use strict;
use IO::Handle;

pipe( CHILDINPUT, PARENTOUTPUT );
pipe( PARENTINPUT, CHILDOUTPUT );

PARENTOUTPUT->autoflush( 1 );
CHILDOUTPUT->autoflush( 1 );
STDOUT->autoflush( 1 );

if ( my $pid = fork() ) {

   for ( 1 .. 10 ) {
      print( PARENTOUTPUT "$_\n" );
      print( "I said $_, " );
      chomp( my $response = <ARENTINPUT> );
      print( "and he said $response!\n" );
   }
#这里开始的 close()语句   
   close( PARENTOUTPUT ) or
      die( "Cannot close PARENTOUTPUT: $!" );
   close( PARENTINPUT ) or
      die( "Cannot close PARENTINPUT: $!" );
}
elsif ( defined( $pid ) ) {
   close( PARENTOUTPUT ) or
      die( "Cannot close PARENTOUTPUT: $!" );
   close( PARENTINPUT ) or
      die( "Cannot close PARENTINPUT: $!" );

   while ( <CHILDINPUT> ) {
      chomp();
      print( CHILDOUTPUT $_ * 20, "\n" );
   }

   close( CHILDOUTPUT ) or
      die( "Cannot close CHILDOUTPUT: $!" );
   close( CHILDINPUT ) or
      die( "Cannot close CHILDINPUT: $!" );
   exit();
}
else {
   die( "Fork did not work" );
}


想问的是,
1.为什么要关闭管道?
2.关闭了某个句柄,管道还可以使用吗?
3.close()函数对管道有什么影响?
我是个菜鸟,实在不明白管道的原理,还请老鸟指教,先谢了
发表于 2006-8-31 10:54:06 | 显示全部楼层
fork()之后生成了两组管道地址,每个进程一组.

在某一个进程中送数据就关闭这个进程中的读数据的一端.

同样,在某一个进程中读数据就关闭这个进程中送数据的一端.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表