文件系統內部結構(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