static inline int vfs_stat(const char __user *filename, struct kstat *stat)用于查找形参filename 代表的文件的属性信息,将其保存到形参stat中返回给用户
其源码分析如下:
static inline int vfs_stat(const char __user *filename, struct kstat *stat)
{
return vfs_statx(AT_FDCWD, filename, AT_NO_AUTOMOUNT,
stat, STATX_BASIC_STATS);
}
可见这里是查询基本信息STATX_BASIC_STATS
int vfs_statx(int dfd, const char __user *filename, int flags,
struct kstat *stat, u32 request_mask)
{
struct path path;
int error = -EINVAL;
unsigned int lookup_flags = LOOKUP_FOLLOW | LOOKUP_AUTOMOUNT;
#根据flag 更新需要查找的flag值lookup_flags
if ((flags & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT |
AT_EMPTY_PATH | KSTAT_QUERY_FLAGS)) != 0)
return -EINVAL;
if (flags & AT_SYMLINK_NOFOLLOW)
lookup_flags &= ~LOOKUP_FOLLOW;
if (flags & AT_NO_AUTOMOUNT)
lookup_flags &= ~LOOKUP_AUTOMOUNT;
if (flags & AT_EMPTY_PATH)
lookup_flags |= LOOKUP_EMPTY;
retry:
#查找文件所在的path
error = user_path_at(dfd, filename, lookup_flags, &path);
if (error)
goto out;
#根据path得到文件的属性信息并保存到stat中,返回给用户
error = vfs_getattr(&path, stat, request_mask, flags);
path_put(&path);
#在查找到文件属性的正常情况下error 等于零
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
out:
return error;
}
内核文件系统API之vfs_stat
最新推荐文章于 2025-07-04 14:48:25 发布