考慮以下代碼:f, err := os.Create(tmpFilepath)defer f.Close()// do some writing to fos.Rename(tmpFilepath, newpath)一些錯誤處理已被刪除以簡化。另外,我知道這段代碼是錯誤的,但我試圖了解這段代碼在文件正確性和性能方面的影響。這里有資源泄漏嗎?順便說一句,解決方法是在您完成寫入文件后關閉。
1 回答
qq_遁去的一_1
TA貢獻1725條經驗 獲得超8個贊
如果我們正在討論一個實現 POSIX 語義的操作系統和文件系統(也就是說,不是通常不允許您重命名打開的文件的 Windows),那絕對沒有問題:打開的文件描述符僅算作指向文件的硬鏈接數據。
重命名文件的數據不會以某種方式與打開的文件描述符分離——將后者視為對該數據的一種“匿名”引用。
引用手冊close(2):_
如果文件的鏈接數為0,當與該文件關聯的所有文件描述符都關閉時,該文件占用的空間將被釋放,該文件將不再可訪問。
- 1 回答
- 0 關注
- 171 瀏覽
添加回答
舉報
0/150
提交
取消
