我正在阅读 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
的任何提及,更不用说它的返回值的描述了。它似乎仅定义用于文件。
答案 0 :(得分:2)
-s
filetest运算符只会在其参数的st_size
调用中返回stat
字段。对目录返回的确切内容取决于操作系统。
在Unix上,-s
将返回目录的大小。这不它包含的文件的总大小。相反,它是它包含的目录条目的大小(不是它们指向的文件,而是条目本身)。这就是为什么目录walker仍然会增加目录中文件的大小。
答案 1 :(得分:-1)
所以共识似乎是在Windows -s目录中返回0,而在Unix中它返回目录指针数组的大小。