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條目,並針對所有模式逐個關閉文件。內核將所有數據結構中只有該進程打開的所有文件條目清除掉。其他條目繼續保留,因為其他進程也許仍要用到它們。