stat()在标量环境里,这个函数返回一个布尔值,该值表示调用是否成功。在列表环境里,它返回一个 13 个元素的列表,给出一个文件的统计信息,该文件要么是通过 FILEHANDLE 打开,要么是用 EXPR 命名。它的典型应用如下:
perl
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $filename;不是在所有文件系统类型上都支持这些域;不支持的域返回 0。下面列出了各个域的含义。
perl
索引 域 含义
0 $dev 文件系统的设备号
1 $ino i 节点号码
2 $mode 文件模式(类型和权限)
3 $nlink 指向该文件的(硬)链接数量
4 $uid 文件所有者的数字用户 ID
5 $gid 文件所属组的数字组 ID
6 $rdev 设备标识符(只用于特殊文件)
7 $size 文件的总尺寸,以字节计
8 $atime 自纪元以来以秒计的上一次访问时间
9 $mtime 自纪元以来以秒计的上一次修改时间
10 $ctime 自纪元以来以秒计的上一次i节点改变的时间(不是创建时间!)
11 $blksize 选定的用于文件系统 I/O 的块尺寸
12 $blocks 实际分配的块数量$dev 和 $ino 放在一起,在同一个系统里唯一地标识一个文件。$blksize 和 $blocks 很可能只在 BSD 衍生出的文件系统里有。如果有 $block 域,那么它是以 512 字节的块汇报的。 $blocks*512 的值可能和 $size 差距相当大,因为有些文件包含未分配的块,或者说“洞”,它们没有在 $blocks 中计算。
如果传递给 stat 一个特殊的文件句柄,该句柄里包含下划线,那么就不会做实际的 stat(2) 调用,而是返回上一次 stat,lstat,或者基于 stat 的文件测试操作符(比如 -r,-w,和 -x)的 stat 结构。
因为模式包含文件类型及其权限,所以如果你想看真正的权限,那么你应该屏蔽掉文件类型部分,并且在 printf 或者 sprintf 里用“%o”:
perl
$mode = (stat($filehane))[2];
printf "Permissions are %04o\n", $mode &07777;File::stat 模块提供一个方便的通过名字访问的机制:
perl
use File:;stat;
$sb = stat($filename);
printf "File is %s, size is %s, perm %04o, mtime %s\n",
$filename, $sb->size, $sb->mode & 07777,
scalar localtime $sb->mtime;你还可以从 Fcntl 模块里输入各种不同模式位的符号定义。
提示:如果你只需要文件尺寸,那么可以用 -s 文件测试操作符,它直接返回以字节计的文件大小。另外还有返回以天计的文件年龄的文件测试。
评论
0评论加载中…