程序14-31 linux/include/sys/stat.h
1 #ifndef _SYS_STAT_H
2 #define _SYS_STAT_H
3
4 #include <sys/types.h>
5
6 struct stat {
7 dev_t st_dev; // 含有文件的设备号。
8 ino_t st_ino; // 文件i节点号。
9 umode_t st_mode; // 文件类型和属性(见下面)。
10 nlink_t st_nlink; // 指定文件的连接数。
11 uid_t st_uid; // 文件的用户(标识)号。
12 gid_t st_gid; // 文件的组号。
13 dev_t st_rdev; // 设备号(如果文件是特殊的字符文件或块文件)。
14 off_t st_size; // 文件大小(字节数)(如果文件是常规文件)。
15 time_t st_atime; // 上次(最后)访问时间。
16 time_t st_mtime; // 最后修改时间。
17 time_t st_ctime; // 最后节点修改时间。
18 };
19
//
// 下面是为st_mode字段所用的值定义的符号名称。这些值均用八进制表示。参见第12章文件
// 系统中图12-5(i节点属性字段内容)。 为便于记忆,这些符号名称均为一些英文单词的首
// 字母或缩写组合而成。 例如名称 S_IFMT 的每个字母分别代表单词 State、Inode、File、
// Mask和Type;而名称 S_IFREG 则是State、Inode、File和REGular几个大写字母的组合;
// 名称S_IRWXU是State、Inode、Read、Write、eXecute和User的组合。其它名称可以此类推。
// 文件类型:
20 #define S_IFMT 00170000 // 文件类型比特位屏蔽码(8进制表示)。
21 #define S_IFLNK 0120000 // 符号链接。
22 #define S_IFREG 0100000 // 常规文件。
23 #define S_IFBLK 0060000 // 块特殊(设备)文件,如磁盘dev/fd0。
24 #define S_IFDIR 0040000 // 目录。
25 #define S_IFCHR 0020000 // 字符设备文件。
26 #define S_IFIFO 0010000 // FIFO特殊文件。
// 文件属性位:
// S_ISUID用于测试文件的set-user-ID标志是否置位。若该标志置位,则当执行该文件时,进程的
// 有效用户ID将被设置为该文件宿主的用户ID。S_ISGID则是针对组ID进行相同处理。
27 #define S_ISUID 0004000 // 执行时设置用户ID(set-user-ID)。
28 #define S_ISGID 0002000 // 执行时设置组ID(set-group-ID)。
29 #define S_ISVTX 0001000 // 对于目录,受限删除标志。
30
31 #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) // 测试是否符号链接文件。
32 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) // 测试是否常规文件。
33 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) // 是否目录文件。
34 #define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) // 是否字符设备文件。
35 #define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) // 是否块设备文件。
36 #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) // 是否FIFO特殊文件。
37
// 文件访问权限:
38 #define S_IRWXU 00700 // 宿主可以读、写、执行/搜索(名称最后字母代表User)。
39 #define S_IRUSR 00400 // 宿主读许可。
40 #define S_IWUSR 00200 // 宿主写许可。
41 #define S_IXUSR 00100 // 宿主执行/搜索许可。
42
43 #define S_IRWXG 00070 // 组成员可以读、写、执行/搜索(名称最后字母代表Group)。
44 #define S_IRGRP 00040 // 组成员读许可。
45 #define S_IWGRP 00020 // 组成员写许可。
46 #define S_IXGRP 00010 // 组成员执行/搜索许可。
47
48 #define S_IRWXO 00007 // 其他人读、写、执行/搜索许可(名称最后字母O代表Other)。
49 #define S_IROTH 00004 // 其他人读许可(最后3个字母代表Other)。
50 #define S_IWOTH 00002 // 其他人写许可。
51 #define S_IXOTH 00001 // 其他人执行/搜索许可。
52
53 extern int chmod(const char *_path, mode_t mode); // 修改文件属性。
54 extern int fstat(int fildes, struct stat *stat_buf); // 取指定文件句柄的文件状态信息。
55 extern int mkdir(const char *_path, mode_t mode); // 创建目录。
56 extern int mkfifo(const char *_path, mode_t mode); // 创建管道文件。
57 extern int stat(const char *filename, struct stat *stat_buf); // 取指定文件名的文件状态信息。
58 extern mode_t umask(mode_t mask); // 设置属性屏蔽码。
59
60 #endif
61