stat.h
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019: #if !defined _SYS_STAT_H && !defined _FCNTL_H
020: # error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
021: #endif
022:
023: #ifndef _BITS_STAT_H
024: #define _BITS_STAT_H 1
025:
026:
027: #define _STAT_VER_KERNEL 0
028:
029: #if __WORDSIZE == 32
030: # define _STAT_VER_SVR4 2
031: # define _STAT_VER_LINUX 3
032:
033:
034: # define _MKNOD_VER_LINUX 1
035: # define _MKNOD_VER_SVR4 2
036: # define _MKNOD_VER _MKNOD_VER_LINUX
037: #else
038: # define _STAT_VER_LINUX 1
039:
040:
041: # define _MKNOD_VER_LINUX 0
042: #endif
043:
044: #define _STAT_VER _STAT_VER_LINUX
045:
046: struct stat
047: {
048: __dev_t st_dev;
049: #if __WORDSIZE == 32
050: unsigned short int __pad1;
051: #endif
052: #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64
053: __ino_t st_ino;
054: #else
055: __ino_t __st_ino;
056: #endif
057: #if __WORDSIZE == 32
058: __mode_t st_mode;
059: __nlink_t st_nlink;
060: #else
061: __nlink_t st_nlink;
062: __mode_t st_mode;
063: #endif
064: __uid_t st_uid;
065: __gid_t st_gid;
066: #if __WORDSIZE == 64
067: int __pad0;
068: #endif
069: __dev_t st_rdev;
070: #if __WORDSIZE == 32
071: unsigned short int __pad2;
072: #endif
073: #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64
074: __off_t st_size;
075: #else
076: __off64_t st_size;
077: #endif
078: __blksize_t st_blksize;
079: #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64
080: __blkcnt_t st_blocks;
081: #else
082: __blkcnt64_t st_blocks;
083: #endif
084: #if defined __USE_MISC || defined __USE_XOPEN2K8
085:
086:
087:
088:
089:
090:
091: struct timespec st_atim;
092: struct timespec st_mtim;
093: struct timespec st_ctim;
094: # define st_atime st_atim.tv_sec
095: # define st_mtime st_mtim.tv_sec
096: # define st_ctime st_ctim.tv_sec
097: #else
098: __time_t st_atime;
099: unsigned long int st_atimensec;
100: __time_t st_mtime;
101: unsigned long int st_mtimensec;
102: __time_t st_ctime;
103: unsigned long int st_ctimensec;
104: #endif
105: #if __WORDSIZE == 64
106: long int __unused[3];
107: #else
108: # ifndef __USE_FILE_OFFSET64
109: unsigned long int __unused4;
110: unsigned long int __unused5;
111: # else
112: __ino64_t st_ino;
113: # endif
114: #endif
115: };
116:
117: #ifdef __USE_LARGEFILE64
118:
119: struct stat64
120: {
121: __dev_t st_dev;
122: # if __WORDSIZE == 64
123: __ino64_t st_ino;
124: __nlink_t st_nlink;
125: __mode_t st_mode;
126: # else
127: unsigned int __pad1;
128: __ino_t __st_ino;
129: __mode_t st_mode;
130: __nlink_t st_nlink;
131: # endif
132: __uid_t st_uid;
133: __gid_t st_gid;
134: # if __WORDSIZE == 64
135: int __pad0;
136: __dev_t st_rdev;
137: __off_t st_size;
138: # else
139: __dev_t st_rdev;
140: unsigned int __pad2;
141: __off64_t st_size;
142: # endif
143: __blksize_t st_blksize;
144: __blkcnt64_t st_blocks;
145: # if defined __USE_MISC || defined __USE_XOPEN2K8
146:
147:
148:
149:
150:
151:
152: struct timespec st_atim;
153: struct timespec st_mtim;
154: struct timespec st_ctim;
155: # define st_atime st_atim.tv_sec
156: # define st_mtime st_mtim.tv_sec
157: # define st_ctime st_ctim.tv_sec
158: # else
159: __time_t st_atime;
160: unsigned long int st_atimensec;
161: __time_t st_mtime;
162: unsigned long int st_mtimensec;
163: __time_t st_ctime;
164: unsigned long int st_ctimensec;
165: # endif
166: # if __WORDSIZE == 64
167: long int __unused[3];
168: # else
169: __ino64_t st_ino;
170: # endif
171: };
172: #endif
173:
174:
175: #define _STATBUF_ST_BLKSIZE
176: #define _STATBUF_ST_RDEV
177:
178: #define _STATBUF_ST_NSEC
179:
180:
181:
182: #define __S_IFMT 0170000
183:
184:
185: #define __S_IFDIR 0040000
186: #define __S_IFCHR 0020000
187: #define __S_IFBLK 0060000
188: #define __S_IFREG 0100000
189: #define __S_IFIFO 0010000
190: #define __S_IFLNK 0120000
191: #define __S_IFSOCK 0140000
192:
193:
194:
195: #define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
196: #define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
197: #define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
198:
199:
200:
201: #define __S_ISUID 04000
202: #define __S_ISGID 02000
203: #define __S_ISVTX 01000
204: #define __S_IREAD 0400
205: #define __S_IWRITE 0200
206: #define __S_IEXEC 0100
207:
208: #ifdef __USE_ATFILE
209: # define UTIME_NOW ((1l << 30) - 1l)
210: # define UTIME_OMIT ((1l << 30) - 2l)
211: #endif
212:
213: #endif
214:
© Andrew Scott 2006 -
2025,
All Rights Reserved