Documentation ¶
Overview ¶
Implement atomic write-rename file pattern. Instead of opening the named file it creates a temporary file next to it, then on Commit() renames it. If the file is Close()d before Commit() then it is unlinked instead.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AtomicFile ¶
type AtomicFile interface { io.Reader io.ReaderAt io.Writer io.WriterAt io.Seeker Truncate(size int64) error // Close and unlink the underlying file object, discarding the contents. // No-op if Close() or Commit() was already called. io.Closer // Get the underlying *File object GetFile() *os.File // Complete the write-rename pattern and close the file Commit() error }
File-like interface used by several functions in this package. Some of them may open a file or stdio directly without atomic semantics, in which case Commit() is an alias for Close()
func New ¶
func New(name string) (AtomicFile, error)
Open a temporary file for reading and writing which will ultimately be renamed to the given name when Commit() is called.
func WriteAny ¶
func WriteAny(path string) (AtomicFile, error)
Pick the best strategy for writing to the given path. Pipes and devices will be written to directly, otherwise write-rename.
func WriteInPlace ¶
func WriteInPlace(src *os.File, dest string) (AtomicFile, error)
If src and dest are the same, use src for reading and writing. If they are different, make a copy and open the destination as an atomicfile, after which src will be closed.