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



请考虑以下代码:

f, err := os.Create(tmpFilepath)
defer f.Close()
// do some writing to f
os.Rename(tmpFilepath, newpath)

为简化起见,删除了一些错误处理。

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

这里有资源泄漏吗?

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

如果我们正在与实现 POSIX 语义的操作系统和文件系统(即通常不允许重命名打开的文件的 Windows(进行对话,则绝对没有问题:打开的文件描述符仅算作文件数据的硬链接。

重命名文件的数据不会以某种方式与打开的文件描述符分离 - 将后者视为对该数据的一种"匿名"引用。

引用close(2)手册:

如果文件的链接计数为 0,则当与文件关联的所有文件描述符都关闭时,应释放文件占用的空间,并且文件将不再可访问。

相关内容

  • 没有找到相关文章

最新更新