【发布时间】:2020-11-24 04:50:21
【问题描述】:
我指的程序是本节中显示的第二个程序here。它的一个小修改是:
#!/usr/bin/perl -w
use IPC::Open2;
use Symbol;
$WTR = gensym(); # get a reference to a typeglob
$RDR = gensym(); # and another one
$pid = open2($RDR, $WTR, 'bc');
print "$pid\n";
while (<STDIN>) { # read commands from user
print $WTR $_; # write a command to bc(1)
$line = <$RDR>; # read the output of bc(1)
print STDOUT "$line"; # send the output to the user
}
这个程序运行正常。说它的名字是 prop_7_2_39_2.pl,那么与它的典型交互是:
>./prop_7_2_39_2.pl
75955
2+2
4
quit
>
也就是说,在输入“quit”之后,子进程bc 就失效了,之后我需要输入一个换行符才能真正完成 perl 父进程。为什么<STDIN> 被评估为假?我知道 perl 评估 <STDIN> 的定义。有点相关的程序
#!/usr/bin/perl -w
while(<STDIN>){}
没有结束。
【问题讨论】:
标签: perl io ipc stdin child-process