文件--索引节点
POSIX没有强制磁盘上的文件采取任何特定的表示方法,但是传统的UNIX文件都是按照改进的树状结构来实现的。目录项中包含一个文件名 和一个定长结构的引用(索引节点)。索引节点包含与文件长度、文件位置、文件所有者、创建时间、最后访问时间、最后修改时间、文件权限有关的信息。如图1所示:
图 1
除了基本信息,还包含指向文件中前几个数据块的指针。如果文件很大,就需要使用到间接指针了。
单级间接指针是一个指向指针块的指针,而指针块中的指针是指向附加数据块的;
二级间接指针是一个执行间接知真块的指针;
三级间接指针块包含了一个指向二级间接指针块的指针。
文件系统在磁盘中存储形式如图1所示:
图1. 磁盘中文件系统存储形式
其中,文件属性及指向文件中所存储数据的指针存储于i-nodes中,文件名、文件中所存储的数据、该文件所对应的i-node编号存储于data blocks中,数据单独存储。如图2所示:
图2. 磁盘中文件存储形式
i-node中包含文件类型、文件访问权限、文件大小、指向文件中所存储数据的指针、文件链接数等信息。当使用link函数使得一个文件指向链接至该文件(即两个文件具有相同的i-node值)时,我们称之为硬链接,此时i-node中文件链接数被加1。需要删除文件时,可使用unlink函数将目标路径与文件的链接中断(使该路径文件的i-node值被清空,文件被删除),注意,此时仅有目标路径文件被删除,该文件所对应的i-node中若链接数不为0,则代表有其他文件仍指向该文件,i-node中链接数将减1,其余信息保持不变。当使用symlink函数为目标文件建立符号链接时,将新建一个i-node,文件类型为symbolic link file,文件长度为目标文件名长度,文件数据指针与目标文件i-node中数据指针相同。
目录
目录文件在文件系统中的存储形式与常规文件类似。目录中所包含的文件名及其i-node值存储在目录文件块中。其存储形式如图3所示:
图3. 磁盘中目录文件存储形式