猿问

在 golang 中,移动打开的文件会导致泄漏或任何其他问题吗?

考虑以下代码:


f, err := os.Create(tmpFilepath)

defer f.Close()

// do some writing to f

os.Rename(tmpFilepath, newpath)

一些错误处理已被删除以简化。


另外,我知道这段代码是错误的,但我试图了解这段代码在文件正确性和性能方面的影响。


这里有资源泄漏吗?


顺便说一句,解决方法是在您完成写入文件后关闭。


杨魅力
浏览 115回答 1
1回答

qq_遁去的一_1

如果我们正在讨论一个实现 POSIX 语义的操作系统和文件系统(也就是说,不是通常不允许您重命名打开的文件的 Windows),那绝对没有问题:打开的文件描述符仅算作指向文件的硬链接数据。重命名文件的数据不会以某种方式与打开的文件描述符分离——将后者视为对该数据的一种“匿名”引用。引用手册close(2):_如果文件的链接数为0,当与该文件关联的所有文件描述符都关闭时,该文件占用的空间将被释放,该文件将不再可访问。
随时随地看视频慕课网APP

相关分类

Go
我要回答