open
我在 perl中见过这两种形式的管道。
一种是简单的管道打开
open FH,'| command';
其他是安全管道打开
open FH,'|-','command';
现在,-
第二个有什么用?他们都写到管道。我知道这会-
分叉新进程。
简单|
也会创建新流程吗?
我们什么时候/应该使用安全管道打开|-
?
之间没有区别
open my $PIPE, '| command';
对比
open my $PIPE, '|-', 'command';
“安全”打开实际上是
open my $PIPE, '|-', 'program', @one_or_more_args;
此版本保证直接启动程序;没有调用任何 shell。它还使您不必将参数转换为 shell 文字。换句话说,
open my $FH, '|-', 'program', @one_or_more_args;
类似于
use String::ShellQuote qw( shell_quote );
open my $FH, '|'.shell_quote('program', @one_or_more_args);
但是没有外壳(因此浪费的资源更少,您将获得程序的PID而不是外壳的PID,并且您会知道程序是否因信号而死)。
不幸的是,没有像 for 那样零参数的程序的语法system
。
(也open my $PIPE, "|-"
没有更多的参数,但那是另一回事。)
-
当你计划(你想)从你自己的叉子(-|
)或你自己的叉子上管道时,你必须使用|-
。该open
函数在父进程中返回子进程ID,在子进程中返回0。例子:
if( open(TO, "|-") ) {
# Parent process
print TO $from_parent;
}
else {
# Child process
$to_child = <STDIN>;
exit;
}