rampatowl
rampatowl

Reputation: 1772

Is it safe to write files in mode 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 + "\n")
    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?

Upvotes: 1

Views: 580

Answers (1)

Uvelichitel
Uvelichitel

Reputation: 8490

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

Upvotes: 1

Related Questions