内核文件系统API之vfs_stat

本文详细解析了vfs_stat函数的工作原理及其实现细节。该函数通过查找文件名对应的文件属性,并将这些信息保存到指定结构中返回给用户。文章深入探讨了如何通过不同标志位控制文件查找行为,并展示了如何处理文件属性获取过程中的错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值