unlink、硬链接、文件描述符、符号链接,文件名
真正指向文件内容的是inode结构体(i节点,VFS inode)。
注意这里的VFS inode指向的文件内容是从底层块设备上读取出来的,如果该文件内容与相应块设备上的数据一致则说明从上一次与存储介质同步以来,该inode并没有变过,如果两个的内容并不相同,则这种状态的inode被称作是脏的。具体VFS 的inode如果从底层存储介质上的EXt文件系统中读取数据,VFS只需要调用file_operations中相应的open,read函数实现即可。
文件描述符--------------->打开的文件表--------->v节点表---------------->i节点----------->文件内容
硬链接------------->i节点------------------>文件内容
目录项(目录项结构体dentry,当打开一个文件后,会在内存中构造这样一个dentry结构体,并存储在内存缓存中cache,便于下次方便查找inode。注意是第一次打开文件后才会在内存中构造,)------------------>i节点----------------->文件内容
符号链接----------------->文件名------------>i节点---------------->文件内容
unlink删除的是文件名,当没有文件名指向i节点的时候,文件内容才会被真正删除。
###################################################################
VFS inode链表:
每个VFS inode都有一个 i_list 成员,可以将inode存储在一个链表中。根据inode的状态,它可能有三种情况
(1)inode存在于内存中,未关联到任何文件,也不处于活动使用状态。
(2)inode存在于内存中,正在由一个或多个进程使用,通常表示一个文件。两个计数器(i_count和i_link)的值都必须大于0。文件内容与相应块设备上的数据一致
(3)inode存在于内存中,通常表示一个文件,其数据内容已经改变,与存储介质上的内容不一致,这时候inode被称为脏的
######################################################################
目录项缓存dentry:
在VFS连同文件系统实现读取的一个目录项(目录或者文件)的数据之后,则创建一个dentry实例,以缓存找到的数据。dentry结构的主要用途是建立文件名和相关inode之间的关联。
########################################################################3
inode是什么?inode在VFS和EXT2中都存在,下面说的是EXT2中的inode。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
linux主要文件系统Ext2基于inode,该文件系统对每个文件都构造了一个单独的管理结构,称为inode,并存储到磁盘上。inode包含了文件的所有的元信息,以及指向相关数据块的指针。目录可以表示为普通文件,其数据包含了指向目录下所有文件的inode指针,因而层次结构得以建立。