文件系统内部结构(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条目,并针对所有模式逐个关闭文件。内核将所有数据结构中只有该进程打开的所有文件条目清除掉。其他条目继续保留,因为其他进程也许仍要用到它们。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM