文章目录
前言
之前我们说明了执行I/O操作的基本函数,其中讨论的是围绕普通文件I/O进行的——打开文件、读文件和写文件。
本次将描述文件系统的其他特征和文件的性质。
我们将从stat函数开始,逐个说明stat结构的每一个成员以了解文件的所有属性。在此过程中将说明修改这些属性的各个函数,还更详细的说明UNIX文件系统的结构以及符号链接,最后介绍对目录操作的各个函数。
1、函数stat、fstat、lstat
头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *path, struct stat *buf);
他们的功能都是用来获取文件属性,成功返回0,失败返回-1。
当以降序遍历目录层次结构时,需要用到lstat
参数:
path:文件路径
fd:需要打开后的文件描述符
buf:是一个指针,它指向一个结构体,其基本形式为:
struct stat {
dev_t st_dev; /* ID of device containing file */ 设备ID
ino_t st_ino; /* inode number */ 节点号
mode_t st_mode; /* protection */ 文件类型和权限
nlink_t st_nlink; /* number of hard links */ 硬链接数
uid_t st_uid; /* user ID of owner */ 用户ID
gid_t st_gid; /* group ID of owner */ 组ID
dev_t st_rdev; /* device ID (if special file) */ 特殊设备ID
off_t st_size; /* total size, in bytes */ 文件的总字节数
blksize_t st_blksize; /* blocksize for file system I/O */ I/O块数
blkcnt_t st_blocks; /* number of 512B blocks allocated */ 占用块(512字节)数
time_t st_atime; /* time of last access */ 最后访问时间
time_t st_mtime; /* time of last modification */ 最后修改时间
time_t st_ctime; /* time of last status change */ 最后文件属性修改时间
};
文件类型信息包含在stat结构的st_mode成员中。
宏 | 文件类型 |
IS_IFMT() | 获取文件类型出错 |
S_ISREG() | 普通文件 |
S_ISDIR() | 目录文件 |
S_ISCHR() | 字符特殊文件 |
S_ISBLK() | 块特殊文件 |
S_ISFIFO() | 管道或FIFO |
S_ISLNK() | 符号链接 |
S_ISSOCK() | 套接字 |
S_ISVTX() | 文件沾粘位 |