免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2141 | 回复: 6
打印 上一主题 下一主题

关于仙子的“简简单单管道”疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-12 20:23 |只看该作者 |倒序浏览
原文“open过程中实际会发生一个fork过程,这个fork对父进程返回子进程的pid,通常是个正整数;对子进程返回0”

这句话不太懂,open是open,fork是fork,翻了好几本书,没有说open操作实际有fork过程,关于这点,大牛们能否深入的讲解下?不胜感激呀

论坛徽章:
0
2 [报告]
发表于 2010-08-13 08:40 |只看该作者
fork是指系统调用。

perl -le 'open P,"tail -f /etc/passwd|";while(<P>){print}'

pstree看一下:
+-bash---perl---tail

tail是perl打开的子进程。

论坛徽章:
0
3 [报告]
发表于 2010-08-13 15:02 |只看该作者
是不是说,使用open的时候实际会发生fork系统调用?学习了

论坛徽章:
0
4 [报告]
发表于 2010-08-13 16:07 |只看该作者
是不是说,使用open的时候实际会发生fork系统调用?学习了
xiaobing927 发表于 2010-08-13 15:02



    这个,看怎么open哦。。Perl的open太复杂了。

perldoc -f open

论坛徽章:
0
5 [报告]
发表于 2010-08-15 08:30 |只看该作者
我怎么觉得不太像是真正的fork吧,起码我知道在 windows 下这个fork就是perl 自身模拟出来的一个东东,资源占用相当大,而且不太稳定的说好像有些。 只是个人理解,还请高手指教。

论坛徽章:
0
6 [报告]
发表于 2010-08-15 09:54 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-08-15 10:24 编辑
  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. open(PIPE, "-|", "ls");
  5. print <PIPE>;
复制代码
  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. substr($^O, 0, 2) ne "MS" or die "Cannot running undef Windows!\n";

  5. defined (my $pid = open(PIPE, "-|")) or die "Fork fail!\n";
  6. if ($pid != 0)
  7. {
  8.         print <PIPE>;
  9.         waitpid($pid, 0);
  10. }
  11. else
  12. {
  13.         exec("ls");
  14.         exit(1);
  15. }
复制代码

  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. substr($^O, 0, 2) ne "MS" or die "Cannot running undef Windows!\n";

  5. pipe(PIPE, W);
  6. defined (my $pid = fork()) or die "Fork fail!\n";
  7. if ($pid != 0)
  8. {
  9.         close W;
  10.         print <PIPE>;
  11.         waitpid($pid, 0);
  12. }
  13. else
  14. {
  15.         close PIPE;
  16.         open(STDERR, ">&", *STDOUT);
  17.         open(STDOUT, ">&", *W);
  18.         close W;
  19.         exec("ls");
  20.         exit(1);
  21. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2010-08-15 10:16 |只看该作者
上面的代码演示,open一个管道时 for read 时,大概产生了什么动作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP