linux下虚拟文件系统介绍(2)

2019-05-26 19:32

在很多情况下,我们会对一个档案或目录的inode做出改变。比方说,我们可以对某个档案呼叫utime()改变这个档案的access time,或者是可以呼叫truncate()把档案的长度减短,这些系统呼叫都会改变档案的inode的属性。有的人会想到,那我们直接把inode拿来改改就好了嘛,何必提供这么个函式呢? 没错,VFS是的确把inode拿来改一改,但是,我们有说过,VFS做的事是属于全部档案系统所共同的部分,而档案系统之间的差异性,必须由各个档案系统提供函式来做。因此,万一使用者改了某个跟档案系统有很大关系的属性时,档案系统本身必须被告知才行。因此,notify_change()就是VFS 告知档案系统的接口。跟上面很多函式一样,档案系统的notify_change()并不会直接被呼叫,s_op->notify_change ()是被包装在VFS函式里,这个函式也叫

notify_change(),它做的事就是把inode里的字段做user所要求的改变,并呼叫档案所属的档案系统的notify_change()。可以改变的属性是放在一个叫iattr结构里。

struct iattr {

unsigned int ia_valid; umode_t ia_mode; uid_t ia_uid; gid_t ia_gid; off_t ia_size; time_t ia_atime; time_t ia_mtime; time_t ia_ctime;

unsigned int ia_attr_flags; };

这个结构的宣告可以在里找到。ia_valid这个字段用来描述底下这几个字段那些是要改变的,ia_mode指的是新的权限,ia_uid为使用者 id,ia_gid为群组id,ia_size是档案大小,ia_atime是access time,ia_mtime为modification time,ia_ctime是creation time,ia_valid的值可以是底下这几个常数的OR值。

#define ATTR_MODE 1

#define ATTR_UID 2 #define ATTR_GID 4 #define ATTR_SIZE 8 #define ATTR_ATIME 16 #define ATTR_MTIME 32 #define ATTR_CTIME 64

#define ATTR_ATIME_SET 128 #define ATTR_MTIME_SET 256 #define ATTR_FORCE 512

#define ATTR_ATTR_FLAG 1024


linux下虚拟文件系统介绍(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:农网改造升级工程标准化建设手册 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: