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
最新推荐文章于 2026-06-20 14:58:29 发布
本文详细解析了vfs_stat函数的工作原理及其实现细节。该函数通过查找文件名对应的文件属性,并将这些信息保存到指定结构中返回给用户。文章深入探讨了如何通过不同标志位控制文件查找行为,并展示了如何处理文件属性获取过程中的错误情况。


5313

被折叠的 条评论
为什么被折叠?



