考虑以下代码:f, err := os.Create(tmpFilepath)defer f.Close()// do some writing to fos.Rename(tmpFilepath, newpath)一些错误处理已被删除以简化。另外,我知道这段代码是错误的,但我试图了解这段代码在文件正确性和性能方面的影响。这里有资源泄漏吗?顺便说一句,解决方法是在您完成写入文件后关闭。
1 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
如果我们正在讨论一个实现 POSIX 语义的操作系统和文件系统(也就是说,不是通常不允许您重命名打开的文件的 Windows),那绝对没有问题:打开的文件描述符仅算作指向文件的硬链接数据。
重命名文件的数据不会以某种方式与打开的文件描述符分离——将后者视为对该数据的一种“匿名”引用。
引用手册close(2)
:_
如果文件的链接数为0,当与该文件关联的所有文件描述符都关闭时,该文件占用的空间将被释放,该文件将不再可访问。
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消