一、获取文件属性

1
2
3
4
5
6
7
8
9
int stat(const char *path, struct stat *buf);
int fstat(int fd, struct stat *buf);
int Istat( const char *path, struct stat *buf);
参数
path:文件路径
fd:文件描述符
buf:属性结构体
返回值
成功:0 失败:NULL

1.1属性结构体的如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct stat
{
dev_tst_dev; //普通文件所在存储器的设备号
mode_tst_mode; //文件类型、文件权限
ino_t st_ino;l //文件索引号
nlink_tst_nlink; //l引用计数
uid_t st_uid; //文件所有者的UID
gid_t st_gid; //文件所属组的GID
dev_tst_rdev; //特殊文件的设备号
off_tst_size; //文件大小
blkcnt_t st_blocks; //文件所占数据块数目
time_t st_atime; //最近访问时间
time_tst_mtime; //最近修改时间
time_t st_ctime; //最近属性更改时间
blksize_t st_blksize; //写数据块建议值
}

1.2文件类型和权限

1.3判断文件权限

1
2
3
4
5
6
7
8
9
10
11
// 文件权限(st_mode最低的9个bit位就是文件权限)
// 1 & ? = ? 判断某位是否为1,就让这位与1相与
char p[10] = {0}; //存储权限的rwx字符的
char rwx[3] = {'r', 'w', 'x'}; //权限可选的字符

for(int i=0; i<9; i++)
{
p[i] = buf.st_mode & (0400 >> i) ? rwx[i%3] : '-';
}
p[9] = '\0';
printf("%s", p);