为什么在目录上使用-s文件测试?

时间:2015-12-03 18:58:50

标签: perl

我正在阅读 Mark Jason Dominus' Higher Order Perl。在他的目录 - 步行者程序中,他有一个名为dir_size的子程序(在第22页的顶部)。

在那个子程序中,他有一个声明:

my $total = -s $dir; 

他已经知道$dir是目录的名称。

$total显然总是设置为零,无论目录的实际大小如何(这与文档所说的内容并不矛盾)。

他是否有任何理由不简单地说$total = 0并避免系统调用的开销?

修改

也许它是Windows和Unix之间的区别,因为人们说它在Unix系统上没有返回0。我正在使用Windows。

但是,如果他正在使用Unix并希望它返回目录的实际大小,为什么他会继续自己添加所有文件大小?

Unix返回的是什么,如果不是目录的完整大小,只是目录文件映射的大小?

修改

我无法在Perl文档中找到用于目录的-s的任何提及,更不用说它的返回值的描述了。它似乎仅定义用于文件。

2 个答案:

答案 0 :(得分:2)

-s filetest运算符只会在其参数的st_size调用中返回stat字段。对目录返回的确切内容取决于操作系统。

在Unix上,-s将返回目录的大小。这它包含的文件的总大小。相反,它是它包含的目录条目的大小(不是它们指向的文件,而是条目本身)。这就是为什么目录walker仍然会增加目录中文件的大小。

答案 1 :(得分:-1)

所以共识似乎是在Windows -s目录中返回0,而在Unix中它返回目录指针数组的大小。