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

时间:2018-07-12 23:58:39

标签: go

我有一个Go函数,可以在文件中追加一行:

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 + "\n")
    return errors.WithStack(err)
}

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

1 个答案:

答案 0 :(得分:1)

os软件包是系统调用的包装,因此您可以确保操作系统提供的保证。在这种情况下,Linux OS保证以O_APPEND标志打开的文件将被原子处理http://man7.org/linux/man-pages/man2/open.2.html