文件系统内部结构(10)

13.4.11  "Close(关闭)"系统调用

"Close(关闭)"系统调用关闭以前打开的文件。该系统调用的语法如下:

close (fd),其中fd表示文件描述符。

内核执行该系统调用如下:

① 内核以"fd"为索引访问UFDT中的条目。

② 内核使用指针遍历对应的FT条目。

③ 将FT条目中的计数字段递减1。如果计数因为"分支"或"复制"操作大于1,那么递减后的计数就不等于0。然后,内核退出系统调用,因为另一个UFDT条目也在访问同一个FT条目。

④ 如果计数在减1后变成0,那么内核释放该FT。

⑤ 在释放FT条目之前,内核从FT穿越到相应的索引节存储区IT条目,也将其中的计数字段减1。

⑥ 如果索引节存储区IT中的计数字段变成0,那么内核也释放IT中的索引节存储区索引节点,并将其链接到IT的空闲索引节存储区索引节点池中。

⑦ 最后,内核删除该文件在UFDT中的条目,不管对应的FT和IT是否被删除。进程中任何对该文件(也就是具有相同的"fd"号)的其他引用被当作是无效的,除非再次打开该文件,因为打开该文件会创建新的"fd"条目。

因此,如果同一个进程采用多种模式打开文件,那么就要对所有这些模式明确地关闭该文件。另一种方式就是,如果进程终止,内核可以检查它的所有UFDT条目,并针对所有模式逐个关闭文件。内核将所有数据结构中只有该进程打开的所有文件条目清除掉。其他条目继续保留,因为其他进程也许仍要用到它们。

posted @ 2012-03-17 22:49  CobbLiu  阅读(5365)  评论(0编辑  收藏  举报