dongxu4023
2018-07-12 23:58
浏览 366
已采纳

在os.O_APPEND | os.O_WRONLY模式下写入文件是否安全?

I have a Go function that appends a line to a file:

func AppendLine(p string, s string) error {
    f, err := os.OpenFile(p, os.O_APPEND|os.O_WRONLY, 0600)
    defer f.Close()

    if err != nil {
        return errors.WithStack(err)
    }

    _, err = f.WriteString(s + "
")
    return errors.WithStack(err)
}

I'm wondering if the flags os.O_APPEND|os.O_WRONLY make this a safe operation. Is there a guarantee that no matter what happens (even if the process gets shut off in the middle of writing) the existing file contents cannot be deleted?

图片转代码服务由CSDN问答提供 功能建议

我有一个Go函数,该函数会将行追加到文件:

   func AppendLine(p string,s string)error {
f,err:= os.OpenFile(p,os.O_APPEND | os.O_WRONLY,0600)
推迟f.Close()
 
如果出现错误 != nil {
返回错误。WithStack(err)
} 
 
 _,err = f.WriteString(s +“ 
”)
返回错误。WithStack(err)
} 
 <  / code>  
 
 

我想知道 os.O_APPEND | os.O_WRONLY 标志是否使此操作安全。 是否可以保证无论发生什么事情(即使在编写过程中进程被关闭),现有的文件内容也无法删除?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douchunxian9740 2018-07-13 00:24
    已采纳

    os package is a wrapper around systems calls so you have guarantees provided by operation system. In this case linux OS guarantees that file opened with O_APPEND flag would be processed atomically http://man7.org/linux/man-pages/man2/open.2.html

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题