为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中安全关闭文件描述符

在 golang 中安全关闭文件描述符

Go
郎朗坤 2022-07-11 16:38:56
另一个问题如何使用 Go 读取/写入文件?在评论中安全关闭文件描述符。请注意,这些示例并未检查 fo.Close() 的错误返回。来自 Linux 手册页 close(2):不检查 close() 的返回值是一个常见但严重的编程错误。上一次 write(2) 操作的错误很有可能在最后的 close() 中首先报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在 NFS 和磁盘配额中尤其明显。– Nick Craig-Wood 2013 年 1 月 25 日 7:12更新帖子的解决方案使用了恐慌:// close fo on exit and check for its returned errordefer func() {    if err := fo.Close(); err != nil {        panic(err)    }}()我想将此错误作为一个值而不是恐慌。
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超5个赞

如果我们害怕写入没有完成close是不够的,那么更新错误仍然是不正确的。

如果您不想这样做,正确的解决方案是fsync文件:

defer(fd.Close())
// Do stuff
return fd.Sync()

通过延迟或在整个函数中维护返回一个非零修改错误更容易阅读。

这将影响性能,但会捕获写入缓冲区的关闭错误和物理写入磁盘的错误。


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号