回答
文件句柄甚至可能不會連接到文件,而是連接到網絡套接字或連接到子進程的標準輸出的管道。
如果要將句柄與代碼打開的路徑相關聯,請使用散列並使用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