在研究另一问题,我注意到,在Perl的stat函数可以采取DIRHANDLE作为其参数(而不是一个文件句柄或文件名)。

但是我不能找到正确的使用此的任何例子 - 有无在Perl的手册

任何人都可以显示如何使用它的示例

有帮助吗?

解决方案

您在您的文件或文件句柄做同样的方式来使用它:

#!/usr/bin/perl
use strict;

my $dir = shift;
opendir(DIR, $dir) or die "Failed to open $dir: $!\n";
my @stats = stat DIR;
closedir(DIR);
my $atime = scalar localtime $stats[8];

print "Last access time on $dir: $atime\n";

使用统计上目录句柄的能力,如果你关心可移植性只是周围的Perl 5.10,因此应尽量避免加。

其他提示

您使用它,就像你stat上一个文件句柄:

<~> $ mkdir -v foo ; perl -e 'opendir($dh , "./foo"); @s = stat $dh; print "@s"'
mkdir: created directory `foo'
2049 11681802 16877 2 1001 1001 0 4096 1228059876 1228059876 1228059876 4096 8

(就个人而言,我喜欢用File::stat得到很好的命名存取,这样我就不必记住(或查找),第五元素是UID ...)

要知道,如果一个句柄被使用过的文件句柄,以及一个DIRHANDLE,该统计将应用到文件,而不是目录:

$ perl -wl
opendir $h, "." or die;
open $h, "/etc/services" or die;
print "dir:".readdir($h);
print "file:".readline($h);
print stat("/etc/services");
print stat(".");
print stat($h);
close($h);
print stat($h);
__END__
dir:.
file:# Network services, Internet style

205527886633188100018274122800783211967194861209994037409640
20551515522168777410001000020480122803711512280371021228037102409640
205527886633188100018274122800783211967194861209994037409640
stat() on closed filehandle $h at - line 1.
    (Are you trying to call stat() on dirhandle $h?)

我使用Perl 5.10.1上窗口(的ActivePerl)和一个DIRHANDLE做统计不起作用。但这样做的目录工程的路径字符串一个统计。

的工作原理

  my $mtime = (stat( $directory ))[ 9 ];
  print "D $directory $mtime\n";

,这并不(以下简称 “dirfd功能是未实现的......”)

  my $dh;
  if( opendir( $dh, $directory ) == 0 ) {
    print "ERROR: can't open directory '$directory': $!\n";
    return;
  }
  $mtime = (stat( $dh ))[ 9 ];
  print "D $directory $mtime\n";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top