专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>perl>

perl之"子进程写往父进程的管道"

百度收藏 QQ搜藏

(二)子进程写往父进程的管道

看看如下代码:
open(FOO, "cat -n '$file'|");
open(FOO, '-|', "cat -n '$file'");
open(FOO, '-|') || exec 'cat', '-n', $file;
先说结论:它们肯定是一样的。

我们先看看第1句。

open(FOO, "cat -n '$file'|");

它的意思其实与前面的差不多哦,cat执行了外部shell命令,等于是fork了一个子进程,它将输出通过管道发送给父进程。如果你还不是很理解,那么看下这个shell命令:

cat -n $file | more

cat的结果通过管道发送给more了。那么cat -n '$file'的结果写往了FOO句柄,父进程正常的读取这个句柄,就可以获取到cat的输出啦。父进程里这样写就可以啦:

print my $line=<FOO>;;

接着看第2句:
open(FOO, '-|', "cat -n '$file'");

又是'-|',它与第1句一样,写法不同罢了。记着:把'-'想象成后面的shell命令。

再看第3句哦:
open(FOO, '-|') || exec 'cat', '-n', $file;

如果你理解了fork,理解了||,理解了exec,那么看它就清清楚楚啦。作用还是一样的哦,||后面的子进程将结果写往FOO句柄,父进程就从FOO句柄接受数据了。

再次提醒大家,在上述3种情况下要注意:
1)父进程对FOO句柄的操作还是与正常的一致,例如,它这样接受FOO句柄的数据:
my $line=<FOO>;;
2)子进程的STDOUT被重定向了,也就是说,子进程的任何输出都会写往管道了。

好了,到这里你应该大概清楚open pipe的方式了吧?还不太明白?那么去看看perldoc的相关手册吧。

上一篇:perl之"父进程写往子进程的管道" 下一篇:perl变量作用域-包变量

power by soyo123 2007-2008