int stat(const char* path,struct stat *s);path文件路径+文件名,s保存文件信息结构体的地址。返回值,成功0,失败-1.
struct stat
{
dev_t st_dev;//文件设备编号
ino_t st_ino;//节点
mode_t st_mode;//文件的类型和存取的权限
nlink_t st_nlink;//连到该文件的硬链接的数目,刚建立的文件值为1
udi_t st_uid;//用户ID
gid_t st_gid;//组ID
dev_t st_rdev;//设备类型
off_t st_size;//文件大小
unsigned long st_blksize;//块大小
unsigned long st_blocks;//块数
time_t st_atime;//最后访问时间
time_t st_mtime;//最后修改时间
time_t st_ctime;//最后改变属性时间
};
1.st_mode文件类型
macro | type of file |
S_ISREG() | regular file |
S_ISDIR() | directory file |
S_ISCHR() | character special file |
S_ISBLK() | block special file |
S_ISFIFO() | pipe or FIFO |
S_ISLINK() | symbolic link |
S_ISSOCK() | socket |
Linux是一个多用户操作系统,因此每个文件都有属性,记录着这个文件属于哪个用户/组。用户/组信息可以被修改,可以通过chown来修改文件所属的组合用户信息。新文件所属用户和组,是创建该文件的进程所属用户和组。
3.文件访问权限
文件使用了9个位来表示访问权限,和文件类型一起,保存在st_mode 中。9位分为3组,每组3位,分别表示读、写、可执行权限。三个组分别表示拥有该文件的账户,用户该文件的组,其它用户组的权限,如果对应位是1,表示有权限,如果是0表示没权限。
Linux提供一些宏,来测试文件的权限位。
st_mode mask | meaning |
S_IRUSR | user-read |
S_IWUSR | user-write |
S_IXUSR | user-execute |
S_IRGRP | group-read |
S_IWGRP | group-write |
S_IXGRP | group-execute |
S_IROTH | other-read |
S_IWOTH | other-write |
S_IXOTH | other-execute |
保存文件的长度,write函数会修改该属性,也可以通过truncate修改文件大小。