blob: c054fb8e0a9377748fc6bb21b32ae8dc24f9cd31 [file] [log] [blame]
Guido van Rossume7b146f2000-02-04 15:28:42 +00001"""Constants/functions for interpreting results of os.stat() and os.lstat().
2
3Suggested usage: from stat import *
4"""
5
Guido van Rossum3bc034b1992-03-31 19:03:19 +00006# XXX Strictly spoken, this module may have to be adapted for each POSIX
7# implementation; in practice, however, the numeric constants used by
8# stat() are almost universal (even for stat() emulations on non-UNIX
Guido van Rossum7aeb4b91994-08-23 13:32:20 +00009# systems like MS-DOS).
Guido van Rossum6b47ed11990-10-21 16:17:08 +000010
Guido van Rossum3bc034b1992-03-31 19:03:19 +000011# Indices for stat struct members in tuple returned by os.stat()
Guido van Rossum6b47ed11990-10-21 16:17:08 +000012
13ST_MODE = 0
14ST_INO = 1
15ST_DEV = 2
16ST_NLINK = 3
17ST_UID = 4
18ST_GID = 5
19ST_SIZE = 6
20ST_ATIME = 7
21ST_MTIME = 8
22ST_CTIME = 9
23
Guido van Rossum3bc034b1992-03-31 19:03:19 +000024# Extract bits from the mode
25
Guido van Rossum468c4481990-10-31 11:25:23 +000026def S_IMODE(mode):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000027 return mode & 0o7777
Guido van Rossum3bc034b1992-03-31 19:03:19 +000028
Guido van Rossum6b47ed11990-10-21 16:17:08 +000029def S_IFMT(mode):
Guido van Rossumcd16bf62007-06-13 18:07:49 +000030 return mode & 0o170000
Guido van Rossum3bc034b1992-03-31 19:03:19 +000031
32# Constants used as S_IFMT() for various file types
33# (not all are implemented on all systems)
Guido van Rossum6b47ed11990-10-21 16:17:08 +000034
Guido van Rossumcd16bf62007-06-13 18:07:49 +000035S_IFDIR = 0o040000
36S_IFCHR = 0o020000
37S_IFBLK = 0o060000
38S_IFREG = 0o100000
39S_IFIFO = 0o010000
40S_IFLNK = 0o120000
41S_IFSOCK = 0o140000
Guido van Rossum6b47ed11990-10-21 16:17:08 +000042
Guido van Rossum3bc034b1992-03-31 19:03:19 +000043# Functions to test for each file type
44
Guido van Rossum6b47ed11990-10-21 16:17:08 +000045def S_ISDIR(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000046 return S_IFMT(mode) == S_IFDIR
Guido van Rossum6b47ed11990-10-21 16:17:08 +000047
48def S_ISCHR(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000049 return S_IFMT(mode) == S_IFCHR
Guido van Rossum6b47ed11990-10-21 16:17:08 +000050
51def S_ISBLK(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000052 return S_IFMT(mode) == S_IFBLK
Guido van Rossum6b47ed11990-10-21 16:17:08 +000053
54def S_ISREG(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000055 return S_IFMT(mode) == S_IFREG
Guido van Rossum6b47ed11990-10-21 16:17:08 +000056
57def S_ISFIFO(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000058 return S_IFMT(mode) == S_IFIFO
Guido van Rossum6b47ed11990-10-21 16:17:08 +000059
60def S_ISLNK(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000061 return S_IFMT(mode) == S_IFLNK
Guido van Rossum6b47ed11990-10-21 16:17:08 +000062
63def S_ISSOCK(mode):
Tim Peters495ad3c2001-01-15 01:36:40 +000064 return S_IFMT(mode) == S_IFSOCK
Guido van Rossum8899a9c1992-05-06 11:38:27 +000065
66# Names for permission bits
67
Guido van Rossumcd16bf62007-06-13 18:07:49 +000068S_ISUID = 0o4000
69S_ISGID = 0o2000
Guido van Rossum8899a9c1992-05-06 11:38:27 +000070S_ENFMT = S_ISGID
Guido van Rossumcd16bf62007-06-13 18:07:49 +000071S_ISVTX = 0o1000
72S_IREAD = 0o0400
73S_IWRITE = 0o0200
74S_IEXEC = 0o0100
75S_IRWXU = 0o0700
76S_IRUSR = 0o0400
77S_IWUSR = 0o0200
78S_IXUSR = 0o0100
79S_IRWXG = 0o0070
80S_IRGRP = 0o0040
81S_IWGRP = 0o0020
82S_IXGRP = 0o0010
83S_IRWXO = 0o0007
84S_IROTH = 0o0004
85S_IWOTH = 0o0002
86S_IXOTH = 0o0001
Thomas Wouterscf297e42007-02-23 15:07:44 +000087
88# Names for file flags
89
90UF_NODUMP = 0x00000001
91UF_IMMUTABLE = 0x00000002
92UF_APPEND = 0x00000004
93UF_OPAQUE = 0x00000008
94UF_NOUNLINK = 0x00000010
95SF_ARCHIVED = 0x00010000
96SF_IMMUTABLE = 0x00020000
97SF_APPEND = 0x00040000
98SF_NOUNLINK = 0x00100000
99SF_SNAPSHOT = 0x00200000