引言
本章将描述文件系统的一些特征和文件的性质,我们通过stat函数,通过这个stat结构了解文件的所有属性,针对这些属性所关联的一些修改函数。那么开始我们今天的旅程吧。
stat 函数
获取一个文件的信息结构,使用此类函数时,需要引用<sys/stat.h>这个头文件,常见的函数有以下几种:
- int stat(const char *restrict pathname, struct stat *restrict buf);
- int fstat(int fd, struct stat *buf);
- int lstat(const char *restrict pathname, struct stat *restrict buf);
- int fstatat(int fd, const char *restrict pathname, struct stat * restrict buf, int flag);.
这些函数使用起来非常简单,通过参数就可以很清晰的告诉我们如何去使用它。
buf 是一个指针,它指向一个我们必须提供的结构,其基本形式是
struct stat
{
mode_t st_mode; // file type & mode (permissions)
ino_t st_ino; // i-node number (serial number)
dev_t st_dev; // device number (file system)
dev_t st_rdev; // device number for special filese
nlink_t st_nlink; // number of links
uid_t st_uid; // user ID of owner
gid_t st_gid; // group ID of owner
off_t st_size; // size in bytes,for regular files
struct timespec st_atime; // time of last access
struct timespec st_mtime; // time of last modification
struct timespec st_ctime; // time of last file status change
blksize_t st_blksize; // best I/O block size
blkcnt_t st_blocks; // number of disk blocks allocated
};
使用stat函数最多的地方可能就是ls -l 命令,其中可以获得有关一个文件的所有信息
access 函数
按照实际用户ID和实际组ID进行访问测试
1、int access(const char *pathname, int mode);
2、int faccessat(int fd, const char *pathname, int mode, int flag);
mode取值:
mode 说明
R_Ok : 测试读权限
W_OK : 测试写权限
F_OK :测试是否存在