inode 接口

index
node是位于内存的索引节点,它是VFS结构中的重要数据结构,因为它实际负责把不同文件系统的特定索引节点信息(甚至不能算是一个索引节点)统一封装起来,避免了进程直接访问具体文件系统。其定义如下:

  1. struct inode {
  2. union { //包含不同文件系统特定inode信息的union成员变量
  3. struct device __device_info; //设备文件系统内存inode信息
  4. struct sfs_inode __sfs_inode_info; //SFS文件系统内存inode信息
  5. } in_info;
  6. enum {
  7. inode_type_device_info = 0x1234,
  8. inode_type_sfs_inode_info,
  9. } in_type; //此inode所属文件系统类型
  10. atomic_t ref_count; //此inode的引用计数
  11. atomic_t open_count; //打开此inode对应文件的个数
  12. struct fs *in_fs; //抽象的文件系统,包含访问文件系统的函数指针
  13. const struct inode_ops *in_ops; //抽象的inode操作,包含访问inode的函数指针
  14. };

在inode中,有一成员变量为in_ops,这是对此inode的操作函数指针列表,其数据结构定义如下:

  1. struct inode_ops {
  2. unsigned long vop_magic;
  3. int (*vop_open)(struct inode *node, uint32_t open_flags);
  4. int (*vop_close)(struct inode *node);
  5. int (*vop_read)(struct inode *node, struct iobuf *iob);
  6. int (*vop_write)(struct inode *node, struct iobuf *iob);
  7. int (*vop_getdirentry)(struct inode *node, struct iobuf *iob);
  8. int (*vop_create)(struct inode *node, const char *name, bool excl, struct inode **node_store);
  9. int (*vop_lookup)(struct inode *node, char *path, struct inode **node_store);
  10. ……
  11. };

参照上面对SFS中的索引节点操作函数的说明,可以看出inode_ops是对常规文件、目录、设备文件所有操作的一个抽象函数表示。对于某一具体的文件系统中的文件或目录,只需实现相关的函数,就可以被用户进程访问具体的文件了,且用户进程无需了解具体文件系统的实现细节。