stat.h
4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* Copyright (C) 2016 Eistec AB
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @file
* @brief POSIX compatible sys/stat.h definitions
* @author Joakim Nohlgård <joakim.nohlgard@eistec.se>
*/
#ifndef SYS_STAT_H
#define SYS_STAT_H
#include <time.h> /* for struct timespec */
#include <sys/types.h> /* for fsblkcnt_t, fsfilcnt_t */
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief File information
*/
struct stat {
dev_t st_dev; /**< Device ID of device containing file. */
ino_t st_ino; /**< File serial number. */
mode_t st_mode; /**< Mode of file (see below). */
nlink_t st_nlink; /**< Number of hard links to the file. */
uid_t st_uid; /**< User ID of file. */
gid_t st_gid; /**< Group ID of file. */
dev_t st_rdev; /**< Device ID (if file is character or block special). */
/**
* For regular files, the file size in bytes.
* For symbolic links, the length in bytes of the pathname contained in the
* symbolic link.
* For a shared memory object, the length in bytes.
* For a typed memory object, the length in bytes.
* For other file types, the use of this field is unspecified.
*/
off_t st_size;
struct timespec st_atim; /**< Last data access timestamp. */
struct timespec st_mtim; /**< Last data modification timestamp. */
struct timespec st_ctim; /**< Last file status change timestamp. */
/**
* A file system-specific preferred I/O block size for this object. In some
* file system types, this may vary from file to file.
*/
blksize_t st_blksize;
blkcnt_t st_blocks; /**< Number of blocks allocated for this object. */
};
/* These bitmasks and numbers are the same as in newlib */
#define S_IFMT 0170000 /* type of file */
#define S_IFDIR 0040000 /* directory */
#define S_IFCHR 0020000 /* character special */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link */
#define S_IFSOCK 0140000 /* socket */
#define S_IFIFO 0010000 /* fifo */
/* These numbers are well-known and can be found in the manual page for sys_stat.h */
#define S_IRWXU 0700 /**< Read, write, execute/search by owner. */
#define S_IRUSR 0400 /**< Read permission, owner. */
#define S_IWUSR 0200 /**< Write permission, owner. */
#define S_IXUSR 0100 /**< Execute/search permission, owner. */
#define S_IRWXG 070 /**< Read, write, execute/search by group. */
#define S_IRGRP 040 /**< Read permission, group. */
#define S_IWGRP 020 /**< Write permission, group. */
#define S_IXGRP 010 /**< Execute/search permission, group. */
#define S_IRWXO 07 /**< Read, write, execute/search by others. */
#define S_IROTH 04 /**< Read permission, others. */
#define S_IWOTH 02 /**< Write permission, others. */
#define S_IXOTH 01 /**< Execute/search permission, others. */
#define S_ISUID 04000 /**< Set-user-ID on execution. */
#define S_ISGID 02000 /**< Set-group-ID on execution. */
#define S_ISVTX 01000 /**< On directories, restricted deletion flag */
/* File type test macros, taken from newlib */
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
/* These function prototypes are required by the standard */
int chmod(const char *, mode_t);
int fchmod(int, mode_t);
int fchmodat(int, const char *, mode_t, int);
int fstat(int, struct stat *);
int fstatat(int, const char *restrict, struct stat *restrict, int);
int futimens(int, const struct timespec [2]);
int lstat(const char *restrict, struct stat *restrict);
int mkdir(const char *, mode_t);
int mkdirat(int, const char *, mode_t);
int mkfifo(const char *, mode_t);
int mkfifoat(int, const char *, mode_t);
int mknod(const char *, mode_t, dev_t);
int mknodat(int, const char *, mode_t, dev_t);
int stat(const char *restrict, struct stat *restrict);
mode_t umask(mode_t);
int utimensat(int, const char *, const struct timespec [2], int);
/* Special tv_nsec values for futimens(2) and utimensat(2). */
#define UTIME_NOW (-2L)
#define UTIME_OMIT (-1L)
#ifdef __cplusplus
}
#endif
#endif /* SYS_STAT_H */
/** @} */