首页›文章›perl stat()函数详解

perl stat()函数详解

计算机技术 · perl 程序开发2013-05-190次浏览0 个评论

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

评论加载中…

发表评论

0/2000