1、文件的属性信息:
1. 属性结构体struct stat;
struct stat {
mode_t st_mode; //文件类型与访问权限位
ino_t st_ino; //文件i节点编号
dev_t st_dev; //文件所属的文件系统的设备号(包括主设备、次设备号)
dev_t st_rdev; //文件是块设备、字符设备时的设备号(主设备、次设备)
nlink_t st_nlink; //
uid_t st_uid; //文件所有者的用户Id
gid_t st_gid; //文件所有者的用户组Id
off_t st_size; //文件的大小(字节单位)
time_t st_atime; //文件内容的最新访问时间
time_t st_mtime; //文件内容的最新修改时间
time_t st_ctime; //文件属性的最新修改时间
blksize_t st_blksize;//文件所在文件系统的块大小
blkcnt_t st_blocks; //文件在文件系统中所占的块数
}
2. 文件类型:
1、普通文件
2、目录文件。文件内容为其包括的文件名称与文件i节点编号
3、块特殊文件。文件为块设备
4、字符特殊文件。文件为字符设备
5、FIFO。命名管道,用于进程间通信
6、套接字。用于进程间的网络通信,进程可以是同一台机器上的,也可以是不同机器上的。
struct stat结构体中的st_mode字段,保存有文件的类型,有如下宏可以查看该文件的类型:
S_ISREG(stat.st_mode)。如果返回结果为真,则为普通文件
S_ISDIR(stat.st_mode)。如果返回结果为真,则为目录文件
S_ISCHR(stat.st_mode)。如果返回结果为真,则为字符特殊文件
S_ISBLK(stat.st_mode)。如果返回结果为真,则为块特殊文件
S_ISFIFO(stat.st_mode)。如果返回结果为真,则为命名管道文件
S_ISLNK(stat.st_mode)。如果返回结果为真,则为符合链接文件
S_ISSOCK(stat.st_mode)。如果返回结果为真,则为套接字文件
3. 获取文件属性信息的函数
#include <sys/stat.h>
int stat(const char *restrict pathname, struct stat *restrict buf);
int fstar(int filedes, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
函数返回值:成功返回0,出错返回-1;
pathname为文件路径、fieldes为文件描述符,buf保存文件属性信息
lstat函数,在文件为符号链接文件类型时,只返回该符号链接文件本身对应的文件属性,而不是该符号链接指向的文件的属性。
操作系统中各种文件类型所占比例
2、文件访问权限
一个文件的权限信息如下图所示:
1、第一列的 -rwxr-xr-x:
-:表示该文件是一个普通文件
rwx:文件所有者拥有的权限,此处所有者的操作权限为对读、写、执行
r-x:文件所有组拥有的权限,此处所有组的操作权限为读、执行
r-x:文件其他用户拥有的权限,此处其他用户的操作权限为读、执行
2、第三、四列的 liuxiaowu liuxiaowu:
第三列表示文件所有者,struct stat结构里的st_uid字段
第四列表示文件所有组,struct stat结构里的st_gid字段
3、第五列的 425:
文件的大小,单位为字节
4、第六、七、八列的 Nov 11 23:02
文件内容最后被修改的时间