Issue #6644: Fix compile error on AIX.
[python.git] / Doc / library / stat.rst
bloba48a02dbf8c84cb42fc93ae8df59d276207b0dff
2 :mod:`stat` --- Interpreting :func:`stat` results
3 =================================================
5 .. module:: stat
6    :synopsis: Utilities for interpreting the results of os.stat(), os.lstat() and os.fstat().
7 .. sectionauthor:: Skip Montanaro <skip@automatrix.com>
10 The :mod:`stat` module defines constants and functions for interpreting the
11 results of :func:`os.stat`, :func:`os.fstat` and :func:`os.lstat` (if they
12 exist).  For complete details about the :cfunc:`stat`, :cfunc:`fstat` and
13 :cfunc:`lstat` calls, consult the documentation for your system.
15 The :mod:`stat` module defines the following functions to test for specific file
16 types:
19 .. function:: S_ISDIR(mode)
21    Return non-zero if the mode is from a directory.
24 .. function:: S_ISCHR(mode)
26    Return non-zero if the mode is from a character special device file.
29 .. function:: S_ISBLK(mode)
31    Return non-zero if the mode is from a block special device file.
34 .. function:: S_ISREG(mode)
36    Return non-zero if the mode is from a regular file.
39 .. function:: S_ISFIFO(mode)
41    Return non-zero if the mode is from a FIFO (named pipe).
44 .. function:: S_ISLNK(mode)
46    Return non-zero if the mode is from a symbolic link.
49 .. function:: S_ISSOCK(mode)
51    Return non-zero if the mode is from a socket.
53 Two additional functions are defined for more general manipulation of the file's
54 mode:
57 .. function:: S_IMODE(mode)
59    Return the portion of the file's mode that can be set by :func:`os.chmod`\
60    ---that is, the file's permission bits, plus the sticky bit, set-group-id, and
61    set-user-id bits (on systems that support them).
64 .. function:: S_IFMT(mode)
66    Return the portion of the file's mode that describes the file type (used by the
67    :func:`S_IS\*` functions above).
69 Normally, you would use the :func:`os.path.is\*` functions for testing the type
70 of a file; the functions here are useful when you are doing multiple tests of
71 the same file and wish to avoid the overhead of the :cfunc:`stat` system call
72 for each test.  These are also useful when checking for information about a file
73 that isn't handled by :mod:`os.path`, like the tests for block and character
74 devices.
76 All the variables below are simply symbolic indexes into the 10-tuple returned
77 by :func:`os.stat`, :func:`os.fstat` or :func:`os.lstat`.
80 .. data:: ST_MODE
82    Inode protection mode.
85 .. data:: ST_INO
87    Inode number.
90 .. data:: ST_DEV
92    Device inode resides on.
95 .. data:: ST_NLINK
97    Number of links to the inode.
100 .. data:: ST_UID
102    User id of the owner.
105 .. data:: ST_GID
107    Group id of the owner.
110 .. data:: ST_SIZE
112    Size in bytes of a plain file; amount of data waiting on some special files.
115 .. data:: ST_ATIME
117    Time of last access.
120 .. data:: ST_MTIME
122    Time of last modification.
125 .. data:: ST_CTIME
127    The "ctime" as reported by the operating system.  On some systems (like Unix) is
128    the time of the last metadata change, and, on others (like Windows), is the
129    creation time (see platform documentation for details).
131 The interpretation of "file size" changes according to the file type.  For plain
132 files this is the size of the file in bytes.  For FIFOs and sockets under most
133 flavors of Unix (including Linux in particular), the "size" is the number of
134 bytes waiting to be read at the time of the call to :func:`os.stat`,
135 :func:`os.fstat`, or :func:`os.lstat`; this can sometimes be useful, especially
136 for polling one of these special files after a non-blocking open.  The meaning
137 of the size field for other character and block devices varies more, depending
138 on the implementation of the underlying system call.
140 The variables below define the flags used in the :data:`ST_MODE` field.
142 Use of the functions above is more portable than use of the first set of flags:
144 .. data:: S_IFMT
146    Bit mask for the file type bit fields.
148 .. data:: S_IFSOCK
150    Socket.
152 .. data:: S_IFLNK
154    Symbolic link.
156 .. data:: S_IFREG
158    Regular file.
160 .. data:: S_IFBLK
162    Block device.
164 .. data:: S_IFDIR
166    Directory.
168 .. data:: S_IFCHR
170    Character device.
172 .. data:: S_IFIFO
174    FIFO.
176 The following flags can also be used in the *mode* argument of :func:`os.chmod`:
178 .. data:: S_ISUID
180    Set UID bit.
182 .. data:: S_ISGID
184    Set-group-ID bit.  This bit has several special uses.  For a directory
185    it indicates that BSD semantics is to be used for that directory:
186    files created there inherit their group ID from the directory, not
187    from the effective group ID of the creating process, and directories
188    created there will also get the :data:`S_ISGID` bit set.  For a
189    file that does not have the group execution bit (:data:`S_IXGRP`)
190    set, the set-group-ID bit indicates mandatory file/record locking
191    (see also :data:`S_ENFMT`).
193 .. data:: S_ISVTX
195    Sticky bit.  When this bit is set on a directory it means that a file
196    in that directory can be renamed or deleted only by the owner of the
197    file, by the owner of the directory, or by a privileged process.
199 .. data:: S_IRWXU
201    Mask for file owner permissions.
203 .. data:: S_IRUSR
205    Owner has read permission.
207 .. data:: S_IWUSR
209    Owner has write permission.
211 .. data:: S_IXUSR
213    Owner has execute permission.
215 .. data:: S_IRWXG
217    Mask for group permissions.
219 .. data:: S_IRGRP
221    Group has read permission.
223 .. data:: S_IWGRP
225    Group has write permission.
227 .. data:: S_IXGRP
229    Group has execute permission.
231 .. data:: S_IRWXO
233    Mask for permissions for others (not in group).
235 .. data:: S_IROTH
237    Others have read permission.
239 .. data:: S_IWOTH
241    Others have write permission.
243 .. data:: S_IXOTH
245    Others have execute permission.
247 .. data:: S_ENFMT
249    System V file locking enforcement.  This flag is shared with :data:`S_ISGID`:
250    file/record locking is enforced on files that do not have the group
251    execution bit (:data:`S_IXGRP`) set.
253 .. data:: S_IREAD
255    Unix V7 synonym for :data:`S_IRUSR`.
257 .. data:: S_IWRITE
259    Unix V7 synonym for :data:`S_IWUSR`.
261 .. data:: S_IEXEC
263    Unix V7 synonym for :data:`S_IXUSR`.
265 Example::
267    import os, sys
268    from stat import *
270    def walktree(top, callback):
271        '''recursively descend the directory tree rooted at top,
272           calling the callback function for each regular file'''
274        for f in os.listdir(top):
275            pathname = os.path.join(top, f)
276            mode = os.stat(pathname)[ST_MODE]
277            if S_ISDIR(mode):
278                # It's a directory, recurse into it
279                walktree(pathname, callback)
280            elif S_ISREG(mode):
281                # It's a file, call the callback function
282                callback(pathname)
283            else:
284                # Unknown file type, print a message
285                print 'Skipping %s' % pathname
287    def visitfile(file):
288        print 'visiting', file
290    if __name__ == '__main__':
291        walktree(sys.argv[1], visitfile)