add a new writeFileAtomic() function
authorAdam Simpkins <simpkins@fb.com>
Thu, 1 Dec 2016 23:45:22 +0000 (15:45 -0800)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Thu, 1 Dec 2016 23:53:35 +0000 (15:53 -0800)
commit3e107c2eb8fccefd31907f434e7e4fb2b24ad002
tree724107fda36a1fb490abe7927b4c6e99c82e2779
parentc1bd7145c3f0dcde7e4dc4681a5b287046f683db
add a new writeFileAtomic() function

Summary:
Add a utility function to more safely set a file's contents by writing to a
temporary file first, then renaming the temporary file into place.  On Linux
systems where renames are atomic, this ensures that the operation either
succeeds or that the old file state is left unchanged on failure.

Note that unlike most of the other APIs in FileUtil.h, I intentionally made
writeFileAtomic() throw an exception on failure.  This is implemented using a
lower-level writeFileAtomicNoThrow() version.  Callers who care about the
exception overhead can use the lower level version instead.  (Exception
overhead should be relatively low compared to the file I/O operations, though,
so I suspect most users will prefer the throwing APIs.)

Reviewed By: yfeldblum

Differential Revision: D4253964

fbshipit-source-id: 5301e2791b82c6f90b63bb509b0411841c266705
folly/FileUtil.cpp
folly/FileUtil.h
folly/test/FileUtilTest.cpp