unix环境高级编程-4.14-文件系统

来源:互联网 发布:软件需求分析报告模板 编辑:程序博客网 时间:2024/05/19 14:51

文件系统

为了说明文件连接的概念,先要介绍UNIX文件系统的基本结构,同时,了解i节点和志向i将诶点的目录项之间的区别也是很有益处的。

目前正在使用的UNIX文件系统有多种实现。例如,SOLARIS支持多种不同类型的磁盘文件系统:传统的机遇BSD的unix文件系统,ufs,读写DOS格式哈软盘的文件系统,以及读CD的文件系统。本节讨论的是UFS。

我们可以把一个磁盘氛围一个或者多个分区。每个分区可以包含一个文件系统。如下如图

 

 

i节点是固定长度的记录项,它包含了有关文件的大部分信息。如果更仔细的观察一个朱米娜的i节点和数据块部分,则可以看到下图所示的情况

 

注意上图中下列各点:

  • 在上图中有两个目录项指向了同一个i节点。每个i节点都有个一个链接计数,其值是指向改i节点的目录项数。只有当链接计数减少至0的时候,才可以删除该文件。也就是可以释放该文件占用的数据块。这既是为什么“解除对一个文件的链接”操作并不总是意味着“释放该文件中拥有磁盘块”的原因。这也是为什么删除一个目录项的函数被称为unlink而不是delete的原因。在stat结构中,链接计数包含在st_link成员中,其基本系统数据类型是nlink_t,这种链接为硬链接。LINK_MAX制定了一个文件连接数的最大值。
  • 另外一种连接类型称为符号链接。对于这种链接,该文件的实际内容包含在该符号链接所指向的文件的名字。在下列lrwxrwxrwx 1 root  7  time  lib->usr/lib该目录项中的文件名是3个字符串lib,而在该文件中包含了7个数据字节usr/lib该i节点中的文件类型是S_IFLNK,于是系统指导这是一个符号链接。
  • i节点包含了大多数与文件有关的信息:文件类型,文件访问权限位,文件长度和指向该文件所用用的数据块的指针等等。stat结构忠的大多数信息都取自i节点。只有两项数据存放在目录项中,文件名字和i节点编号。i节点编号的数据类型是ino_t
  • 每个文件系统各自对他们的i节点进行编号,因此木目录项中的i节点编号数指向同一个文件系统中的相应的i节点。不能是使一个目录项指向另一个文件系统的i节点。这就是为什么ln(1)命令(构造一个指向一个向右文件的新录像)不能跨越文件系统的原因。我们将在下一节说明link函数。
  • 当在不更换文件系统情况下为一个文件更名时候,该文件的实际内容并未改动,只需构造一个指现有i节点的新目录项,并解除与旧目录项的链接。

我们说明了普通文件的链接计数概念,但是对于目录文件的链接计数字段又如何呢?假定我们在工作目录中构造了一个新目录:如命令

mkdir testdir

下图显示了其结果。注意改图显示的显示了.和..目录项。

对于编号为2549的i节点,其类型字段表示他是一个目录,而连接计数为2.任何一个叶目录的连接计数总是2,数值2来自于命名该目录目录项以及在该目录忠的.项。对于编号为1267的i节点,器类型字段表示她是一个目录,二连接技术则大雨或等于3.他大雨或等于3的原因是,至少有三个目录项指向他:一个是命名他的目录项。第二个是该目录中的.项第三个是在其子目录的testdir中的..项注意,父目录中的每一个子目录都会是该目录项的链接计数增1。

更多内容欢迎访问:http://blog.csdn.net/wallwind

原创粉丝点击