免费注册 查看新帖 |

Chinaunix

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

一個關於子進程的問題 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-19 23:40 |只看该作者 |倒序浏览
書上說:儅你明確使用 exec 開啓一個新的程序或者通過調用一個通過管道的open,system或者qx // 隱含的執行一個新程序是,Perl 會自動關閉已經打開的文件句柄(STDIN,STDOUT,STDERR除外) 但是通過設置 S^F 可以改變文件描述符的最大值,這樣 exec 函數就可以繼續訪問。我寫了如下代碼:
  1. #! /usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Fcntl qw(:DEFAULT :flock);

  5. local $^F = 100;
  6. open INPUT, '<.cshrc';
  7. if (my $pid = fork) {
  8.     wait;
  9. } else {
  10.     defined $pid or die "fork : $!\n";
  11.     my $fdfile = "/dev/fd/" . fileno(INPUT);
  12.     exec("cat", "-n", $fdfile) or die "error: $!\n";
  13. }
  14. close INPUT;
复制代码
輸出結果為:
cat: /dev/fd/3: No such file or directory

爲什麽會這樣?

另外 /dev/fd 目錄下面只有 0 1 2 三個

论坛徽章:
0
2 [报告]
发表于 2013-03-20 17:03 |只看该作者
本帖最后由 kelvenchi 于 2013-03-20 17:04 编辑
  1. #! /usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Fcntl qw(:DEFAULT :flock F_SETFD F_GETFD);

  5. open INPUT, '</root/.cshrc';
  6. fcntl INPUT, F_SETFD, 0;
  7. if (my $pid = fork) {
  8.     wait;
  9. } else {
  10.     defined $pid or die "fork : $!\n";
  11.     my $fdfile = "/dev/fd/" . fileno INPUT;
  12.     exec 'cat', '-n', $fdfile;
  13. }
  14. close INPUT;
复制代码
這樣也不行,到底這是爲什麽呢?

论坛徽章:
0
3 [报告]
发表于 2013-03-22 11:23 |只看该作者
版主,幫俺看看好麽,要不帖子就沉了?

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
4 [报告]
发表于 2013-03-22 14:09 |只看该作者
回复 1# kelvenchi


    测试了下没问题

论坛徽章:
0
5 [报告]
发表于 2013-03-22 18:54 |只看该作者
yybmsrs 发表于 2013-03-22 14:09
回复 1# kelvenchi


你用的是linux么 ? 我系统是FreeBSD。

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
6 [报告]
发表于 2013-03-23 21:44 |只看该作者
回复 5# kelvenchi


    CentOS 6

论坛徽章:
0
7 [报告]
发表于 2013-03-24 18:54 |只看该作者
yybmsrs 发表于 2013-03-23 21:44
回复 5# kelvenchi


不明白在FreeBSD上面为什么会出错,搞半天都没有成功。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP