All Projects → stackbuilders → atomic-write

stackbuilders / atomic-write

Licence: MIT license
Writes files atomically in Haskell while preserving permissions

Programming Languages

haskell
3896 projects

Build Status Hackage version

Atomic Write

Atomic Write assists with atomic modification of files using Haskell. It is a wrapper for using the atomic mv(1) operation which correctly sets permissions based on the original file, or on system defaults if no file previously exists.

How it works

On most Unix systems, mv is an atomic operation. This makes it simple to write to a file atomically just by using the mv operation. However, this will destroy the permissions on the original file. This library does the following to preserve permissions while atomically writing to a file:

If an original file exists, take those permissions and apply them to the temp file before mving the file into place.

If the original file does not exist, create a following with default permissions (based on the currently-active umask).

This way, when the file is mv'ed into place, the permissions will be the ones held by the original file.

This library is based on similar implementations found in common libraries in Ruby and Python:

Usage

To use atomic-write, import the module corresponding to the type you wish to write atomically, e.g., to write a (strict) ByteString atomically:

import System.AtomicWrite.Writer.ByteString

Then you can use the atomicWriteFile function that accepts a FilePath and a ByteString, e.g.:

atomicWriteFile myFilePath myByteString

See the Haddock documentation.

License

MIT, see the LICENSE file.

Contributing

Do you want to contribute to this project? Please take a look at our contributing guideline to know how you can help us build it.


Stack Builders
Check out our libraries | Join our team

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].