内核文件系统API之vfs_getattr

int vfs_getattr(const struct path *path, struct kstat *stat,
		u32 request_mask, unsigned int query_flags)用于得到文件的 enhanced basic attributes 即基本的扩展属性

其源码分析如下:
int vfs_getattr(const struct path *path, struct kstat *stat,
		u32 request_mask, unsigned int query_flags)
{
	int retval;
	#对path 表示的文件进行安全检查,例如selinux
	retval = security_inode_getattr(path);
	if (retval)
		return retval;
	#前面已经检查过安全了,因此这里通过非安全的方法获得文件的基本扩展属性
	return vfs_getattr_nosec(path, stat, request_mask, query_flags);
}
int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
		      u32 request_mask, unsigned int query_flags)
{
	#得到path 表示文件的inode
	struct inode *inode = d_backing_inode(path->dentry);
	#清零stat,因为stat 会保存扩展属实返回给用户
	memset(stat, 0, sizeof(*stat));
	stat->result_mask |= STATX_BASIC_STATS;
	request_mask &= STATX_ALL;
	query_flags &= KSTAT_QUERY_FLAGS;
	#看起来文件的扩展属性可以保存到inode上,则通过inode 提供的函数返回给用户
	if (inode->i_op->getattr)
		return inode->i_op->getattr(path, stat, request_mask,
					    query_flags);
	#如果inode上没有保存,则调用文件系统提供的通用函数获得文件的扩展属性
	generic_fillattr(inode, stat);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值