<sys/stat.h> 定义了fstat()
, lstat()
和stat()
返回的数据结构。
- fstat obtains information about an open file
- stat obtains information about the named file
- lstat 与 stat 相似,但在处理符号链接时行为不一样:
- lstat 返回符号链接的信息
- stat 返回链接指向的文件的信息
综上,stat.h 主要是声明文件信息相关的属性和方法。文件的基本信息有:
dev_t st_dev
: 文件所属的设备 IDino_t st_ino
: 文件序列号mode_t_st_mode
: 文件的权限模式nlink_t st_nlink
: 文件的链接数uid_t st_uid
: 文件所属用户的 IDgid_t st_gid
: 文件所属用户组的 IDdev_t st_rdev
: device ID of character or block deviceoff_t st_size
: 常规文件包含的字节数time_t st_atime
: 最后一次访问文件的时间time_t st_mtime
: 最后一次修改文件的时间time_t st_ctime
: 最后一次状态变化(?)的时间blksize_t st_blksize
: 文件的读写块大小,不同的文件类型可能不同blkcnt_t st_blocks
: 文件的块的数目
设备 ID 和文件的序列号(Serial Number)唯一标识了文件在文件系统中的位置。
上述文件基本信息的类型可以分为两类:时间类型(3个)和非时间类型(10个),非时间类型都定义在 <sys/types.h> 中,时间类型实际上也是整型,它指的是公历纪元开始到现在的总秒数。
stat.h 同时定义了st_mode
的取值集合:
- 文件类型:
S_IFMT
文件S_IFBLK
块设备S_IFCHR
字符设备S_FIFO
FIFO 设备S_IFREG
普通文件S_IFDIR
目录S_IFLNK
符号链接
- 权限模式:
S_IRUSR
,S_IWUSR
,S_IXUSR
,S_IRWXU
for user (owner)S_IRGRP
,S_IWGRP
,S_IXGRP
,S_IRWXG
for groupS_IROTH
,S_IWOTH
,S_IXOTH
,S_IRWXO
for ohersS_ISUID
,S_ISGID
在执行时设置用户 ID / 用户组 IDS_ISVTX
限制目录的删除
stat.h 提供几个宏用于测试文件的类型,测试为真返回非 0 值,测试为假返回 0:
S_ISBLK(m)
文件是否是块设备S_ISCHR(m)
文件是否是符号设备S_ISDIR(m)
文件是否是一个目录S_ISFIFO(m)
文件是否是一个 FIFOS_ISREG(m)
是否一个普通文件S_ISLNK(m)
是否是一个符号链接
消息队列、信号量和内存共享对象也能被实现为不同类型的文件:
S_TYPEISMQ(buf)
is message queue?S_TYPEISSEM(buf)
is semaphore?S_TYPEISSHM(buf)
is shared memory object?
stat.h 还提供了几个函数宏,处理与文件相关的事务:chmod, fchmod, fstat, lstat, stat, mkdir, mkfifo, mknod, umask.
参考文档:https://pubs.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html
评论区