考慮以下代碼:f, err := os.Create(tmpFilepath)defer f.Close()// do some writing to fos.Rename(tmpFilepath, newpath)一些錯(cuò)誤處理已被刪除以簡(jiǎn)化。另外,我知道這段代碼是錯(cuò)誤的,但我試圖了解這段代碼在文件正確性和性能方面的影響。這里有資源泄漏嗎?順便說(shuō)一句,解決方法是在您完成寫(xiě)入文件后關(guān)閉。
1 回答

qq_遁去的一_1
TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果我們正在討論一個(gè)實(shí)現(xiàn) POSIX 語(yǔ)義的操作系統(tǒng)和文件系統(tǒng)(也就是說(shuō),不是通常不允許您重命名打開(kāi)的文件的 Windows),那絕對(duì)沒(méi)有問(wèn)題:打開(kāi)的文件描述符僅算作指向文件的硬鏈接數(shù)據(jù)。
重命名文件的數(shù)據(jù)不會(huì)以某種方式與打開(kāi)的文件描述符分離——將后者視為對(duì)該數(shù)據(jù)的一種“匿名”引用。
引用手冊(cè)close(2)
:_
如果文件的鏈接數(shù)為0,當(dāng)與該文件關(guān)聯(lián)的所有文件描述符都關(guān)閉時(shí),該文件占用的空間將被釋放,該文件將不再可訪問(wèn)。
- 1 回答
- 0 關(guān)注
- 145 瀏覽
添加回答
舉報(bào)
0/150
提交
取消