回答
文件句柄甚至可能不会连接到文件,而是连接到网络套接字或连接到子进程的标准输出的管道。
如果要将句柄与代码打开的路径相关联,请使用散列并使用fileno
运算符,例如。,
my %fileno2path;
sub myopen {
my($path) = @_;
open my $fh, "<", $path or die "$0: open: $!";
$fileno2path{fileno $fh} = $path;
$fh;
}
sub myclose {
my($fh) = @_;
delete $fileno2path{fileno $fh};
close $fh or warn "$0: close: $!";
}
sub path {
my($fh) = @_;
$fileno2path{fileno $fh};
}
您可以在一个文件句柄调用stat
或IO::Handle::stat
- 它将使你,你已经打开的文件的设备和节点。有了这个和一个小操作系统的巫术,你可以找到文件名。好的,也许有很多操作系统的魔力。
的find
命令有一个-inum
选项查找指定索引节点号的文件。正如gbacon的建议,这可能不会像打开文件时缓存路径那样高效。
也是一个有效的解决方法,虽然很慢(如您所述)。 – 2010-05-12 21:35:06
谁可能会寻找更好的方法来从文件句柄或文件描述符查找的文件名:
我宁愿如果有使用find -inum。 或者,如何使用以下方式,总是 - 除unix/linux兼容以外的任何缺点!
my $filename='/tmp/tmp.txt';
open my $fh, '>', $filename;
my $fd = fileno $fh;
print readlink("/proc/$$/fd/$fd");
如果你没有文件句柄,你也可以使用'fileno $ {^ LAST_FH}'(例如你使用'<>')。 – 2014-12-16 01:03:51
这是Linux兼容的,通常不是Unix兼容的。 – tripleee 2017-12-21 13:18:11
- 1. Perl中的IO :: Select在Windows中使用文件句柄吗?
- 2. perl中的转储文件句柄号
- 3. 写文件(句柄)的内容,以不同的文件句柄
- 4. 我可以使用文件句柄代替文件名来创建DBM文件吗?
- 5. 什么是Perl中的文件句柄的内置名称?
- 6. perl中同一个文件的两个文件句柄
- 7. 我可以设置文件被下载到的文件名吗?
- 8. perl cgi传递文件句柄
- 9. Perl glob和文件句柄问题
- 10. 我可以在Perl 5中创建字符串文件句柄,如何在Perl 6中完成它?
- 11. 在ashx文件中,我可以设置返回文件的文件名吗?
- 12. 我可以把mod_rewrite语句放在我的apache.conf文件中吗?
- 13. 在Perl中的文件句柄上的UTF-8编码
- 14. Perl文件上传。如何多次访问文件句柄?
- 15. perl文件上传不能初始化文件句柄
- 16. Perl找到文件的扩展名
- 17. readline()在Perl中未打开的文件句柄错误
- 18. perl:在内存中的文件句柄sysread?
- 19. 我可以找到所有GAS文件的中央列表吗?
- 20. 如何在Perl中将文件句柄指向STDOUT(或另一个文件句柄)?
- 21. 在python中缓存文件句柄到netCDF文件
- 22. 从文件句柄值中获取文件名
- 23. 从文件句柄中获取文件名?
- 24. ItemReader可以”找到我的csv文件
- 25. 是否可以在Perl中使用单个文件句柄读取多个文件?
- 26. 如何以编程方式生成多个Perl文件句柄?
- 27. 如何在Perl类中存储和访问文件句柄?
- 28. 仿型的文件句柄
- 29. 如何在perl中没有提供文件名时使用__DATA__句柄
- 30. 如何写入我存储在数组中的Perl文件句柄?
谢谢。不是我想听到的,而是更有效的解决方法。 – 2010-05-12 21:34:13
@ sh-beta不客气!我希望它有帮助。 – 2010-05-12 21:35:17