10.3. statInterpreting stat() results

源程序代码:Lib/stat.py


stat模块定义解析os.stat()os.fstat()os.lstat()的结果(如果它们存在)的常量和函数。有关stat()fstat()lstat()调用的完整细节,请参阅您的系统文档。

stat模块定义以下函数来测试特定的文件类型:

stat.S_ISDIR(mode)

如果mode来自一个目录,返回非零。

stat.S_ISCHR(mode)

如果mode来自特殊的字符设备文件,返回非零。

stat.S_ISBLK(mode)

如果mode来自特殊的块设备文件,返回非零。

stat.S_ISREG(mode)

如果mode来自一个正常的文件,返回非零。

stat.S_ISFIFO(mode)

如果mode来自FIFO(命名管道),返回非零。

stat.S_ISLNK(mode)

如果mode来自一个符号链接,返回非零。

stat.S_ISSOCK(mode)

如果mode来自一个套接字,返回非零。

还附加定义两个函数用于更一般的文件模式的操作:

stat.S_IMODE(mode)

返回可以通过os.chmod()设置的文件模式部分 —  也就是说,文件的权限位,再加上sticky 位、set-group-id和set-user-id 位(在支持他们的系统上)。

stat.S_IFMT(mode)

返回描述文件类型的文件模式部分(使用上面的S_IS*()函数)。

通常情况下,您将使用os.path.is*()函数检验文件的类型;当你正在做同一文件的多个测试,并希望避免每个测试的stat ()系统调用的过度开销,这里的这些函数将非常有用。这些也是有用的当检查并不由os.path,像块设备和字符设备测试的文件的信息。

示例:

import os, sys
from stat import *

def walktree(top, callback):
    '''recursively descend the directory tree rooted at top,
       calling the callback function for each regular file'''

    for f in os.listdir(top):
        pathname = os.path.join(top, f)
        mode = os.stat(pathname).st_mode
        if S_ISDIR(mode):
            # It's a directory, recurse into it
            walktree(pathname, callback)
        elif S_ISREG(mode):
            # It's a file, call the callback function
            callback(pathname)
        else:
            # Unknown file type, print a message
            print 'Skipping %s' % pathname

def visitfile(file):
    print 'visiting', file

if __name__ == '__main__':
    walktree(sys.argv[1], visitfile)

下面的所有变量都是 10 元组返回的os.stat() os.fstat()os.lstat()只是象征性的索引。

stat.ST_MODE

Inode 保护模式。

stat.ST_INO

inode 节点号。

stat.ST_DEV

设备 inode 驻留在上。

Inode 的链接数。

stat.ST_UID

为所有者的用户 id。

stat.ST_GID

组的所有者 id。

stat.ST_SIZE

大小 (以字节为单位) 的是普通的文件 ;在一些特殊文件等的数据量。

stat.ST_ATIME

上次访问的时间。

stat.ST_MTIME

最后一次修改的时间。

stat.ST_CTIME

由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

"文件大小"的解释与文件类型有关。对于普通的文件,这是文件以字节为单位的大小。在大多数的Unix系列(特别是Linux)下,对于FIFOs和套接字,"大小"是在调用os.stat() os.fstat()os.lstat()时正在等待读取的字节数;这有时会有用,尤其是在一次非阻塞的打开之后查询其中的一个这些特殊文件。其他字符和块设备的大小字段的含义变化更大,具体取决于底层的系统调用的实现。

下面的变量定义在ST_MODE字段中使用的标志。

使用上述函数比使用下面第一组标志更便携:

stat.S_IFSOCK

套接字。

stat.S_IFLNK

符号链接。

stat.S_IFREG

常规文件。

stat.S_IFBLK

块设备。

stat.S_IFDIR

目录。

stat.S_IFCHR

字符设备。

stat.S_IFIFO

先进先出。

以下标志也可以用于os.chmod()mode 参数:

stat.S_ISUID

设置 UID 位。

stat.S_ISGID

设置组 ID 位。这一点有几种特殊用途。对于一个目录,它指示 BSD 语义是要用于该目录: 那里创建的文件继承他们的组 ID 的目录,不是来自这个创造的过程中,有效的组 ID,创建那里目录也将获得设置了S_ISGID位。做一个文件组执行位 (S_IXGRP) 都不会成立,集组 ID 位指示强制性的文件记录锁定 (见S_ENFMT)。

stat.S_ISVTX

粘滞位。当这位被设置在一个目录上,这意味着在该目录中的文件可以被重命名或删除仅由该文件的所有者、 由目录的所有者或特权的进程。

stat.S_IRWXU

文件所有者权限掩码。

stat.S_IRUSR

所有者拥有读取权限。

stat.S_IWUSR

所有者具有写入权限。

stat.S_IXUSR

所有者具有执行权限。

stat.S_IRWXG

组权限掩码。

stat.S_IRGRP

组具有读取权限。

stat.S_IWGRP

组具有写入权限。

stat.S_IXGRP

组具有执行权限。

stat.S_IRWXO

他人 (不在组中) 的权限的掩码。

stat.S_IROTH

其他具有读取权限。

stat.S_IWOTH

其他具有写入权限。

stat.S_IXOTH

别人有执行权限。

stat.S_ENFMT

V 系统文件锁定的执法行动。此标志与S_ISGID共享: 文件/记录锁定执行上不包含组执行文件 (S_IXGRP) 设置位。

stat.S_IREAD

Unix V7 S_IRUSR的代名词。

stat.S_IWRITE

Unix V7 S_IWUSR的代名词。

stat.S_IEXEC

Unix V7 S_IXUSR的代名词。

os.chflags() flags参数,可以使用以下标志:

stat.UF_NODUMP

转储文件。

stat.UF_IMMUTABLE

不能更改该文件。

stat.UF_APPEND

该文件可能只被追加到。

stat.UF_OPAQUE

该目录是不透明的通过联盟的堆栈查看时。

该文件可能不能重命名或删除。

stat.UF_COMPRESSED

该文件存储压缩 (Mac OS X 10.6+)。

stat.UF_HIDDEN

该文件不应显示在 GUI (Mac OS X 10.5+) 中。

stat.SF_ARCHIVED

该文件可能被存档。

stat.SF_IMMUTABLE

不能更改该文件。

stat.SF_APPEND

该文件可能只被追加到。

该文件可能不能重命名或删除。

stat.SF_SNAPSHOT

该文件是一个快照文件。

看到 * BSD 或 Mac OS 系统人页chflags(2)的详细信息。