免费注册 查看新帖 |

Chinaunix

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

如何通过文件句柄获取文件名? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-05 12:11 |只看该作者 |倒序浏览
RT,有直接的方法吗?

Code:
sub sub1
{
    my $file = shift;
    print $file "test";
}

open FILE, ">test.dat";
sub1(*FILE);

在sub1里面,能通过$file获取文件的名字吗?

thanks

论坛徽章:
0
2 [报告]
发表于 2008-06-05 12:38 |只看该作者
应该不是不可以的,就是可能比较麻烦些

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2008-06-05 13:03 |只看该作者
不如说说你取它干什么?

BTW:我的签名里就有这个问题,典型的思路错误。

论坛徽章:
0
4 [报告]
发表于 2008-06-05 13:08 |只看该作者
原帖由 flw 于 2008-6-5 13:03 发表
不如说说你取它干什么?

BTW:我的签名里就有这个问题,典型的思路错误。


版主英明!

论坛徽章:
0
5 [报告]
发表于 2008-06-05 13:15 |只看该作者
当我看到这个帖子的时候,我就知道flw会给楼猪上一课的。
有些时候,你需要有点历史知识才行。

论坛徽章:
0
6 [报告]
发表于 2008-06-05 13:45 |只看该作者

回复 #3 flw 的帖子

很简单啊,我就想把文件名写到文件中去。
嗯,要是没有方法,把文件名当参数传一下就行了~
我只是想知道有没有这样的方法,以前没见过……

论坛徽章:
0
7 [报告]
发表于 2008-06-05 13:49 |只看该作者
其实不通用的方法还是有一个
前提是你用的是linux

/proc/$pid/fd
这个文件夹
此处
$pid是进程号,可以通过$$取得
fd下面有很多文件描述符,对于一个打开的文件句柄,文件描述符可以通过
fileno($filehander)取得
你自己看看/proc/$pid/fd里面好了,里面的都是软链接,指向文件在硬盘上的位置
你自己新建一个read的文件,然后用下面的脚本试试

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open my $file,"<","read" or die "Fail to open $!";
  5. my $file_num = fileno($file);
  6. my $raw_data =  qx @ file /proc/$$/fd/$file_num @ ;
  7. chomp $raw_data;
  8. print "raw data is $raw_data \n";
  9. print "File name is ",(split /\s+/,$raw_data)[-1],"\n"
复制代码

但这个方法并不是很通用

变态一点可以写成下面那样

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open my $file,"<",$ARGV[0] or die "Fail to open $!";
  5. { local $\ ="\n";
  6.         print "File name is ", map {   ( split )[-1]  } qx | file /proc/$$/fd/@{[fileno($file)]} |;
  7. }
复制代码

通过

  1. ./name your_input_file
复制代码

来运行

[ 本帖最后由 churchmice 于 2008-6-5 14:39 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-06-05 14:03 |只看该作者
哎,真没注意到阿!

论坛徽章:
0
9 [报告]
发表于 2008-06-05 14:04 |只看该作者
原帖由 churchmice 于 2008-6-5 13:49 发表
其实不通用的方法还是有一个
前提是你用的是linux

/proc/$pid/fd
这个文件夹
此处
$pid是进程号,可以通过$$取得
fd下面有很多文件描述符,对于一个打开的文件句柄,文件描述符可以通过
fileno($fil ...


多谢churchmice指点! 这个方法是可以获取文件名的!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2008-06-05 14:42 |只看该作者
原帖由 johnrobbet 于 2008-6-5 13:45 发表
很简单啊,我就想把文件名写到文件中去。
嗯,要是没有方法,把文件名当参数传一下就行了~
我只是想知道有没有这样的方法,以前没见过……

那为啥不把文件名当作参数传递过去,然后在 sub1 内部再打开文件?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP