2>具体文件系统的索引节点是存放在磁盘上的,是一种静态结构,要使用它,必须将其调入内存,填写 VFS的索引节点。VFS索引节点也称为动态节点。(即索引节点仅当文件被方位时才在内存中创建)
3>我们来深入下来看一下它的内核
它的定义在 /include/linux/fs.h中有这个结构体的定义
725struct inode {
726 struct hlist_node i_hash; //散列表
727 struct list_head i_list; //索引节点链表
728 struct list_head i_sb_list; //链接一个文件系统中所有inode的链表
729 struct list_head i_dentry; //目录项链表
730 unsigned long i_ino; //索引节点号
731 atomic_t i_count; //引用计数
732 unsigned int i_nlink; //硬连接数
733 uid_t i_uid; //使用者的id
734 gid_t i_gid; //使用组id
735 dev_t i_rdev; //实际设备标识符号
736 unsigned int i_blkbits;
737 u64 i_version; //版本号
738 loff_t i_size; //以字节为单位
739#ifdef __NEED_I_SIZE_ORDERED
740 seqcount_t i_size_seqcount;
741#endif
742 struct timespec i_atime; //最后访问时间
743 struct timespec i_mtime; //最后修改时间
744 struct timespec i_ctime; //最后改变时间
745 blkcnt_t i_blocks; //文件的块数
746 unsigned short i_bytes; //使用的字节数
747 umode_t i_mode; //访问权限控制
748 spinlock_t i_lock; //自旋锁
749 struct mutex i_mutex;
750 struct rw_semaphore i_alloc_sem;
751 const struct inode_operations *i_op; //索引节点操作表
752 const struct file_operations *i_fop; //默认的索引节点链表
753 struct super_block *i_sb; //相关的超级块
754 struct file_lock *i_flock; //文件锁链表
755 struct address_space *i_mapping; //相关的地址映射
756 struct address_space i_data; //设备地址映射
757#ifdef CONFIG_QUOTA
758 struct dquot *i_dquot[MAXQUOTAS]; //节点的磁盘限额
759#endif
760 struct list_head i_devices; //块设备链表
761 union {
762 struct pipe_inode_info *i_pipe; //管道信息
763 struct block_device *i_bdev; //块设备驱动
764 struct cdev *i_cdev;
765 };
766
767 __u32 i_generation; //索引节点版本号
768
769#ifdef CONFIG_FSNOTIFY
770 __u32 i_fsnotify_mask; /* all events this inode cares about */
771 struct hlist_head i_fsnotify_marks;
772#endif
773
774 unsigned long i_state; //状态标志
775 unsigned long dirtied_when; //首次修改时间
776
777 unsigned int i_flags; //文件系统标志
778
779 atomic_t i_writecount; //写者计数
780#ifdef CONFIG_SECURITY
781 void *i_security; //安全模块
782#endif
783#ifdef CONFIG_FS_POSIX_ACL
784 struct posix_acl *i_acl;
785 struct posix_acl *i_default_acl;
786#endif
787 void *i_private; /* fs or device private pointer */
788};
在我们看完这段代码后,是不是发现在上面被紫色标记的一些信息我们都很熟悉,还记的我们在终端下输入命令:ls 命令后可以看到文件的信息,这些信息就是记录在这里的。
这是为什么呢?