分析 mode_t st_mode
st_mode 是一个16位的位图,用于表示文件类型,文件访问权限,及特殊权限位。
mhr@ubuntu:~/work/linux/wenjianxitong/20$ ls -l
total 24
-rwxrwxr-x 1 mhr mhr 8936 May 4 09:04 a.out
-rw-rw-r-- 1 mhr mhr 436 May 4 09:04 big.c
-rw------- 1 mhr mhr 5368709120 May 4 09:04 bigfile
-rw------- 1 mhr mhr 5368709120 May 4 09:07 bigfile.bak
mhr@ubuntu:~/work/linux/wenjianxitong/20$
即最前面一串 -rwxrwxr-x 等等,这些信息全部存放在 st_mode 中,以位图的形式存放。mode_t 是一个16位的整型数。mode_t 由2部分组成: 文件类型 + 文件权限
文件类型 user权限 group 同组用户的权限 other 用户的权限
- rwx rwx r-x
文件类型分为如下几类:
dcb-lsp 7种类型
1 普通文件 -
2 目录文件 d
3 块特殊文件 b
4 字符特殊文件 c
5 FIFO p
6 套接字(socket) s
7 符号链接(symbolic link) l
用如下宏测试文件类型,成立返回真,不成立返回假
位图
.
struct stat {
dev_t st_dev; 文件所在设备的ID
ino_t st_ino; 节点号
mode_t st_mode; 文件的类型和存取的权限
nlink_t st_nlink; 链向此文件的连接数(硬连接)
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev; 设备ID号,针对设备文件
off_t st_size; 文件大小,字节为单位
blksize_t st_blksize; 系统块的大小
blkcnt_t st_blocks; 文件所占块数
struct timespec st_atim; 最近存取时间
struct timespec st_mtim; 最近修改时间
struct timespec st_ctim;
#define st_atime st_atim.tv_sec
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};