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

在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?

  • 写回答

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容